糖果派对官方网站_可以赌钱的糖果游戏_手机版
异步委托 八十多线程完结摇奖器 winform版

异步委托 八十多线程完结摇奖器 winform版

作者:操作系统    来源:未知    发布时间:2020-03-14 19:59    浏览量:

自身在看书学习的时候,看见在作保线程安全时,举个例子用Parallel类的ForEach方法调用次线程,次线程用了以下的言语:this.Invoke((Action卡塔尔(قطر‎delegate{this.Text=string.Format("Processing{0}onthread{1}",filename,Thread.CurrentThread.ManagedThreadIdState of Qatar;}上边语句中text是主线程序调节件中的一个文件框,filename是一个文件名.笔者的迷离有二:第一,这一个委托为啥要强迫转换到Action委托呢?Control.Invoke(卡塔尔(قطر‎不是足以选择任何委托么?第二,笔者能精晓把那几个无名情势以委托的款式转给主线程,那样主线程再来操作text控件就到达安全的指标了,但是,主线程在操作text控件的话,此时的CurrentThread不就应该是主线程了吧?

原稿揭橥时间为:二〇〇九-03-30 —— 来源于自身的百度文章 [由搬家工具导入]

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;

public long str1, str2, str3, str4, str5, sum=0,sum1=0;

namespace _08_摇奖机
{
//创制三个invoke方法(控件调用的时候的委托,用来给lable控件赋值)
public delegate void MyDelegate1;
public delegate void MyDelegate2;
public delegate void MyDelegate3;
public delegate void MyDelegate4;
public delegate void MyDelegate5;
public delegate void MyDelegate6;
public partial class Form1 : Form
{
public MyDelegate1 md1;
public MyDelegate1 md2;
public MyDelegate1 md3;
public MyDelegate1 md4;
public MyDelegate1 md5;
public MyDelegate1 md6;
//此委托用来作异步委托,目的在于让clr自动创设另一个线程来成功主线程要做的操作,以缓和主线程的下压力
public delegate void MyDelegate;
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 = "停止";
//调用异步委托,便是在另二个线程中实施此委托绑定的点子
IAsyncResult result = md.BeginInvoke(true,null, null);
}
else
{
button1.Text = "开始";
//结束的话就一定于终止子线程
nameThread.Abort();
}

public void button1_Click(object sender, EventArgs e)
{

//首先要想清楚 要给主线程的空间lable赋值,那么就亟须是主线程干的事

Thread.CurrentThread.Name = "主线程 ";

//md.EndInvoke;
}

Thread objThreadOne = new Thread(new ThreadStart(fun1));

public void SetNumberData
{
while
{
List<int> listNum = new List<int>();
Random random = new Random();
//随机生成6个数
while (listNum.Count <= 6)
{
int n = random.Next;
listNum.Add;
}
//不是创建此控件的线程调用此控件的时候就必需调用invoke方法
if (this.label1.InvokeRequired)
{
this.Invoke(md1, listNum[0]);
}
else
{
label1.Text = listNum[0].ToString();
}
if (this.label2.InvokeRequired)
{
bb电子糖果派对,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;
}
//id=Thread.CurrentThread.ManagedThreadId;

objThreadOne.Name = "子线程 1 ";

}

Thread objThreadTwo = new Thread(new ThreadStart(fun2));

public void SetLable1
{
label1.Text = n.ToString();
}
public void SetLable2
{
label2.Text = n.ToString();
}
public void SetLable3
{
label3.Text = n.ToString();
}
public void SetLable4
{
label4.Text = n.ToString();
}
public void SetLable5
{
label5.Text = n.ToString();
}
public void SetLable6
{
label6.Text = n.ToString();
}
}
}bb电子糖果派对 1bb电子糖果派对 2

objThreadTwo.Name = "子线程 2 ";

objThreadOne.Start();

objThreadTwo.Start();

上一篇:没有了
友情链接: 网站地图
Copyright © 2015-2019 http://www.tk-web.com. bb电子糖果派对有限公司 版权所有