#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; }));}elsestatusBar1.Text = status;}麻烦哪位达人帮我解释逐句解释下呢。特别是Invoke(setStatusDelegate, new object[] { status });这句,我不明白,程序每次执行到这里也就完了。百思不得其解啊
1 回答

繁星点点滴滴
TA贡献1803条经验 获得超3个赞
新的线程中,我们需要与UI进行交互,在.net中不允许我们直接这样做,在子线程中,调用到控件的话,编译器会认为是不安全的的。Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性。因此,如果从另一个线程调用控件的方法,那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程。Invoke 生成同步方法调用;BeginInvoke 生成异步方法调用。注意BeginInvoke前面的对象是this,也就是主线程。他们作用是差不多的,只是同步与异步的区别。
- 1 回答
- 0 关注
- 119 浏览
添加回答
举报
0/150
提交
取消