欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

winform基于異步委托實現(xiàn)多線程搖獎器

 更新時間:2014年10月21日 14:47:18   投稿:shichen2014  
這篇文章主要介紹了winform基于異步委托實現(xiàn)多線程搖獎器的方法,包含了線程的運用及隨機數(shù)的生成,需要的朋友可以參考下

本文實例講述了winform基于異步委托實現(xiàn)多線程搖獎器。分享給大家供大家參考。具體實現(xiàn)方法如下:

復(fù)制代碼 代碼如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _08_搖獎機
{
//創(chuàng)建六個invoke方法(控件調(diào)用的時候的委托,用來給lable控件賦值)
public delegate void MyDelegate1(int num);
public delegate void MyDelegate2(int num);
public delegate void MyDelegate3(int num);
public delegate void MyDelegate4(int num);
public delegate void MyDelegate5(int num);
public delegate void MyDelegate6(int num);
public partial class Form1 : Form
{
public MyDelegate1 md1;
public MyDelegate1 md2;
public MyDelegate1 md3;
public MyDelegate1 md4;
public MyDelegate1 md5;
public MyDelegate1 md6;
//此委托用來作異步委托,旨在讓clr自動創(chuàng)建另一個線程來完成主線程要做的操作,以緩解主線程的壓力
public delegate void MyDelegate(bool b);
public Form1()
{
InitializeComponent();
md1 = SetLable1;
md2 = SetLable2;
md3 = SetLable3;
md4 = SetLable4;
md5 = SetLable5;
md6 = SetLable6;
}
//用來存放子線程對象
private Thread nameThread;
private int id;
private void button1_Click(object sender, EventArgs e)
{
MyDelegate md = new MyDelegate(this.SetNumberData);;
if (button1.Text.Trim()=="開始")
{
button1.Text = "停止";
//調(diào)用異步委托,就是在另一個線程中執(zhí)行此委托綁定的方法
IAsyncResult result = md.BeginInvoke(true,null, null);
}
else
{
button1.Text = "開始";
//停止的話就相當于終止子線程
nameThread.Abort();
}

//首先要想清楚 要給主線程的空間lable賦值,那么就必須是主線程干的事

//md.EndInvoke(result);
}

public void SetNumberData(bool b)
{
while (b==true)
{
List<int> listNum = new List<int>();
Random random = new Random();
//隨機生成6個數(shù)
while (listNum.Count <= 6)
{
int n = random.Next(0, 10);
listNum.Add(n);
}
//不是創(chuàng)建此控件的線程調(diào)用此控件的時候就必須調(diào)用invoke方法
if (this.label1.InvokeRequired)
{
this.Invoke(md1, listNum[0]);
}
else
{
label1.Text = listNum[0].ToString();
}
if (this.label2.InvokeRequired)
{
this.Invoke(md2, listNum[1]);
}
else
{
label2.Text = listNum[1].ToString();
}
if (this.label3.InvokeRequired)
{
this.Invoke(md3, listNum[2]);
}
else
{
label3.Text = listNum[2].ToString();
}
if (this.label4.InvokeRequired)
{
this.Invoke(md4, listNum[3]);
}
else
{
label4.Text = listNum[3].ToString();
}
if (this.label5.InvokeRequired)
{
this.Invoke(md5, listNum[4]);
}
else
{
label5.Text = listNum[4].ToString();
}
if (this.label6.InvokeRequired)
{
this.Invoke(md6, listNum[5]);
}
else
{
label6.Text = listNum[5].ToString();
}
//記錄下當前的線程對象,以便于在點擊停止按鈕的時候終止此線程
nameThread = Thread.CurrentThread;
Thread.Sleep(300);
}
//id=Thread.CurrentThread.ManagedThreadId;

}

public void SetLable1(int n)
{
label1.Text = n.ToString();
}
public void SetLable2(int n)
{
label2.Text = n.ToString();
}
public void SetLable3(int n)
{
label3.Text = n.ToString();
}
public void SetLable4(int n)
{
label4.Text = n.ToString();
}
public void SetLable5(int n)
{
label5.Text = n.ToString();
}
public void SetLable6(int n)
{
label6.Text = n.ToString();
}
}

程序運行結(jié)果如下所示:

希望本文所述對大家的C#程序設(shè)計有所幫助。

相關(guān)文章

  • c# 進程之間的線程同步

    c# 進程之間的線程同步

    這篇文章主要介紹了c# 進程之間的線程同步,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-10-10
  • C#基于Modbus三種CRC16校驗方法的性能對比

    C#基于Modbus三種CRC16校驗方法的性能對比

    這篇文章主要介紹了C#基于Modbus三種CRC16校驗方法的性能對比,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C# Onnx實現(xiàn)DIS高精度圖像二類分割

    C# Onnx實現(xiàn)DIS高精度圖像二類分割

    這篇文章主要為大家詳細介紹了C# Onnx實現(xiàn)DIS高精度圖像二類分割的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • C#使用回溯法解決背包問題實例分析

    C#使用回溯法解決背包問題實例分析

    這篇文章主要介紹了C#使用回溯法解決背包問題,實例分析了背包問題的描述及C#解決方法,需要的朋友可以參考下
    2015-04-04
  • C#鍵盤鼠標鉤子實例

    C#鍵盤鼠標鉤子實例

    這篇文章主要介紹了C#鍵盤鼠標鉤子的實現(xiàn)方法,以實例形式分析了針對鍵盤與鼠標鉤子的實現(xiàn)步驟與相關(guān)技巧,并配有相關(guān)官方文檔說明的地址,需要的朋友可以參考下
    2014-12-12
  • C#實現(xiàn)獲取枚舉中元素個數(shù)的方法

    C#實現(xiàn)獲取枚舉中元素個數(shù)的方法

    這篇文章主要介紹了C#實現(xiàn)獲取枚舉中元素個數(shù)的方法,是深入理解C#程序設(shè)計所需要掌握的基本技巧,需要的朋友可以參考下
    2014-08-08
  • C#帶你玩掃雷(附源碼)

    C#帶你玩掃雷(附源碼)

    這篇文章主要介紹了C#帶你玩掃雷(附源碼),詳細的介紹實現(xiàn)掃雷的方法,具體一定的參考價值,有興趣的可以了解一下
    2017-10-10
  • Unity接入高德開放API實現(xiàn)IP定位

    Unity接入高德開放API實現(xiàn)IP定位

    這篇文章主要為大家介紹了Unity如何接入高德開放API實現(xiàn)IP定位功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)或工作有一定參考價值,需要的可以參考一下
    2022-04-04
  • C#中Invoke 和 BeginInvoke 的真正涵義

    C#中Invoke 和 BeginInvoke 的真正涵義

    這篇文章主要介紹了C#中Invoke 和 BeginInvoke 的真正涵義,需要的朋友可以參考下
    2014-10-10
  • c#入門之分支語句使用方法(三元運算符、if語句、switch語句)

    c#入門之分支語句使用方法(三元運算符、if語句、switch語句)

    這篇文章主要介紹了c#入門之分支語句使用方法,包括三元運算符、if語句、switch語句,需要的朋友可以參考下
    2014-04-04

最新評論