Winform中的Control.Invoke&Control.BeginInvoke
2012-02-22 21:06
357 查看
最近由于毕业论文的原因接触了下Winform,以前对于Control.BeginInvoke和delegate下的同样的方法的区别不是很清楚,这次借着这次机会把这个知识点好好补了一下。
先来说说Winform中的Control吧,Winform中的控件是运行在UI线程中的,而不是工作线程(可以通过InvokeRequired来进行判断是不是安全的),所以如果我们在工作线程中对其的属性进行修改的话,那么多线程的时候就会产生问题。所以微软是不建议这样操作的
那么如果我需要控件完成某个事情,我需要怎么做呢?这时候Control.Invoke的作用就体现出来了。这里需要注意的是有两个一个是Invoke,另外一个是BeginInvoke,那么这两者有什么区别呢?
如果后台工作线程需要对UI这个线程的方法调用进行等待那么就用Invoke,如果不需要等待,,当传入的方法执行完毕后工作线程继续执行的,那么就用BeginInvoke,两者的区别仅仅在于是否阻塞工作线程,而传入的方法其实都是在UI线程内执行的
而delegate的BeginInvoke其实是新开辟的一个线程,在这个新开辟的线程中执行这个方法
在VS中Debug/Windows/Threads可以查看运行的进程
/article/4700503.html
先来说说Winform中的Control吧,Winform中的控件是运行在UI线程中的,而不是工作线程(可以通过InvokeRequired来进行判断是不是安全的),所以如果我们在工作线程中对其的属性进行修改的话,那么多线程的时候就会产生问题。所以微软是不建议这样操作的
那么如果我需要控件完成某个事情,我需要怎么做呢?这时候Control.Invoke的作用就体现出来了。这里需要注意的是有两个一个是Invoke,另外一个是BeginInvoke,那么这两者有什么区别呢?
如果后台工作线程需要对UI这个线程的方法调用进行等待那么就用Invoke,如果不需要等待,,当传入的方法执行完毕后工作线程继续执行的,那么就用BeginInvoke,两者的区别仅仅在于是否阻塞工作线程,而传入的方法其实都是在UI线程内执行的
而delegate的BeginInvoke其实是新开辟的一个线程,在这个新开辟的线程中执行这个方法
private void button1_Click(object sender, EventArgs e) { Func<string> func = () => { MessageBox.Show(Thread.CurrentThread.ManagedThreadId.ToString()); return "asdf"; }; func.BeginInvoke(null, null); }
在VS中Debug/Windows/Threads可以查看运行的进程
/article/4700503.html
相关文章推荐
- WinForm二三事(三)Control.Invoke&Control.BeginInvoke
- WinForm二三事(三)Control.Invoke&Control.BeginInvoke
- Winform中消息循环、异步操作、Control.Invoke&Control.BeginInvoke学习
- WinForm二三事(三)Control.Invoke&Control.BeginInvoke
- [转载]Winform中Control的Invoke与BeginInvoke方法
- WinForm 之Control.Invoke 和Control.BeginInvoke 方法的使用
- Control.Invoke&Control.BeginInvoke
- WinForm二三事(三)Control.Invoke&Control.BeginInvoke
- WinForm 之Control.Invoke 和Control.BeginInvoke 方法的使用 Control 不能在创建它的 Thread 之外被调用。但可以通过 invoke 来保证 C
- WinForm 之Control.Invoke 和Control.BeginInvoke 方法的使用
- WinForm 之Control.Invoke 和Control.BeginInvoke 方法的使用
- 转:浅述WinForm多线程编程与Control.Invoke的应用
- C# 对委托的BeginInvoke,EndInvoke 及Control 的BeginInvoke,EndInvoke 的理解
- Winform中使用Reactivex代替BeginInvoke/Invoke来更新UI数据
- Control 的 BeginInvoke和Invoke
- 浅述WinForm多线程编程与Control.Invoke的应用
- Control的Invoke和BeginInvoke
- control.begininvoke
- winform 开发之Control.InvokeRequired
- Control的Invoke和BeginInvoke 是相对于支线线程