C#中多线程中窗体的操作

 我来答
元小翠044
2016-11-07 · TA获得超过8.2万个赞
知道大有可为答主
回答量:2.4万
采纳率:89%
帮助的人:3359万
展开全部
要从其他跨线程存取调用控件,可采用以下两种方法之一:
方法1)不进行线程安全的检查
方法2)通过委托的方式
代码如下所示
public partial class Form1 : Form { public Form1() { InitializeComponent(); //方法1:不进行跨线程安全检查 //System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; } private void button1_Click(object sender, EventArgs e) { Thread th1 = new Thread(new ThreadStart(CalNum)); th1.Start(); } private void CalNum() { //button1.Enabled = false; int result = 0; for (int i = 1; i < 100000000; i++) { result += i; } SetCalResult(result); //button1.Enabled = true; } //方法2:检查是否跨线程,然后将方法加入委托,调用委托 public delegate void SetTextHandler(int result); private void SetCalResult(int result) { if (label2.InvokeRequired == true) { SetTextHandler set = new SetTextHandler(SetCalResult);//委托的方法参数应和SetCalResult一致 label2.Invoke(set, new object[] { result }); //此方法第二参数用于传入方法,代替形参result } else { label2.Text = result.ToString(); } } }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式