#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 });这句,我不明白,程序每次执行到这里也就完了。百思不得其解啊
C# 线程委托解释
答案:2 悬赏:10 手机版
解决时间 2021-04-11 21:51
- 提问者网友:刺鸟
- 2021-04-10 22:13
最佳答案
- 五星知识达人网友:患得患失的劫
- 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();
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯