最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

本文實(shí)例講述了winform基于異步委托實(shí)現(xiàn)多線程搖獎器。分享給大家供大家參考。具體實(shí)現(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_搖獎機(jī)
{
//創(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 = "開始";
//停止的話就相當(dāng)于終止子線程
nameThread.Abort();
}

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

//md.EndInvoke(result);
}

public void SetNumberData(bool b)
{
while (b==true)
{
List<int> listNum = new List<int>();
Random random = new Random();
//隨機(jī)生成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();
}
//記錄下當(dāng)前的線程對象,以便于在點(diǎn)擊停止按鈕的時候終止此線程
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();
}
}

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

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

相關(guān)文章

  • Unity中的InitializeOnLoad特性實(shí)踐深入解析

    Unity中的InitializeOnLoad特性實(shí)踐深入解析

    這篇文章主要為大家介紹了Unity中的InitializeOnLoad特性實(shí)踐深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • C#獲取鼠標(biāo)在listview右鍵點(diǎn)擊單元格的內(nèi)容方法

    C#獲取鼠標(biāo)在listview右鍵點(diǎn)擊單元格的內(nèi)容方法

    下面小編就為大家?guī)硪黄狢#獲取鼠標(biāo)在listview右鍵點(diǎn)擊單元格的內(nèi)容方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C#中獲取各種文件名的實(shí)現(xiàn)方式

    C#中獲取各種文件名的實(shí)現(xiàn)方式

    這篇文章主要介紹了C#中獲取各種文件名的實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • WPF如何利用附加屬性修改ShowGridLines效果詳解

    WPF如何利用附加屬性修改ShowGridLines效果詳解

    這篇文章主要給大家介紹了關(guān)于WPF如何利用附加屬性修改ShowGridLines效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2018-04-04
  • C#使用ping命令的兩個例子

    C#使用ping命令的兩個例子

    這篇文章主要介紹了C#使用ping命令的兩個例子,本文給出了調(diào)用CMD命令和使用C# ping類的兩個例子,需要的朋友可以參考下
    2014-08-08
  • C#TextBox設(shè)置提示文本方式(SetHintText)

    C#TextBox設(shè)置提示文本方式(SetHintText)

    這篇文章主要介紹了C#TextBox設(shè)置提示文本方式(SetHintText),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • c#獲取客戶端IP地址(考慮代理)

    c#獲取客戶端IP地址(考慮代理)

    這篇文章主要介紹了c#獲取客戶端IP地址(考慮代理),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 改進(jìn)c# 代碼的五個技巧(一)

    改進(jìn)c# 代碼的五個技巧(一)

    這篇文章主要介紹了改進(jìn)c# 代碼的五個技巧(一),幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01
  • 在C#中捕獲內(nèi)存不足異常

    在C#中捕獲內(nèi)存不足異常

    這篇文章主要介紹了在C#中捕獲內(nèi)存不足異常,下面文章內(nèi)容圍繞如何在C#中捕獲內(nèi)存不足異常的相關(guān)資料展開詳細(xì)內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你有所幫助
    2021-12-12
  • 快速了解如何在.NETCORE中使用Generic-Host建立主機(jī)

    快速了解如何在.NETCORE中使用Generic-Host建立主機(jī)

    這篇文章主要介紹了如何在.NETCORE中使用Generic-Host建立主機(jī),文中代碼非常詳細(xì),可供大家參考,感興趣的朋友不妨閱讀完
    2020-05-05

最新評論

宁德市| 如东县| 奉节县| 丹东市| 尖扎县| 阿图什市| 景东| 视频| 神池县| 楚雄市| 武清区| 呼伦贝尔市| 开原市| 六盘水市| 都兰县| 赤城县| 漳浦县| 漳浦县| 都兰县| 松溪县| 商城县| 湖口县| 武清区| 尼玛县| 忻城县| 平江县| 白城市| 敖汉旗| 姚安县| 开江县| 明水县| 邵阳市| 东方市| 右玉县| 凤山市| 桦南县| 洛宁县| 嘉鱼县| 高阳县| 平山县| 北川|