永发信息网

C# 线程委托解释

答案:2  悬赏:10  手机版
解决时间 2021-04-11 21:51
  • 提问者网友:刺鸟
  • 2021-04-10 22:13
#region 线程安全UI操作代码
private delegate void SetStatusDelegate(string status);
private SetStatusDelegate setStatusDelegate; // 赋值在构造函数里 private void SetStatus(string status)
{
if (InvokeRequired)
{
Invoke(setStatusDelegate, new object[] { status });
//this.BeginInvoke(new MethodInvoker(delegate { statusBar1.Text = status; }));
}
else
statusBar1.Text = status;
}麻烦哪位达人帮我解释逐句解释下呢。特别是Invoke(setStatusDelegate, new object[] { status });这句,我不明白,程序每次执行到这里也就完了。百思不得其解啊
最佳答案
  • 五星知识达人网友:患得患失的劫
  • 2021-04-10 23:27
新的线程中,我们需要与UI进行交互,在.net中不允许我们直接这样做,在子线程中,调用到控件的话,编译器会认为是不安全的的。Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性。因此,如果从另一个线程调用控件的方法,那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程。Invoke 生成同步方法调用;BeginInvoke 生成异步方法调用。注意BeginInvoke前面的对象是this,也就是主线程。他们作用是差不多的,只是同步与异步的区别。
全部回答
  • 1楼网友:慢性怪人
  • 2021-04-11 00:34
在load里面加入 private delegate void mydelegate(); 然后在load_load事件中加入 this.invoke(new mydelegate(up)); 还有l.close() 在load里添加一个函数 public void load_close() { this.invoke(new mydelegate(this.close)); } 然后在form1调用 l.load_close();
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯