Control.BeginInvoke()和delegate的BeginInvoke()的区别
最近在一个demo中了解到可以用BeginInvoke来处理异步,于是我也自己做了一个winform来学习BeginInvoke。 在窗体上放置了一个按钮和一个label,点击按钮3秒后再label上显示“Hello World”。先是有了如下代码: 1 private void btnStart_Click(object sender, EventArgs e) 2 { 3 BeginInvoke(new xDel(k => 4 { 5 Thread.Sleep(k); 6 txtMain.Text = "Hello World"; 7 }), 3000); 8 } 9 10 delegate void xDel(int i); 点击按钮后调用BeginInvoke执行异步,传递一个委托。按照我的设想,应该BeginInvoke应该是创建一个新线程执行委托,所以不会造成UI假死。 但是结果是运行后UI还是假死了。 后来上网查找了一些资料才发现,原先看的demo里使用的委托的BeginInvoke方法,而我写的BeginInvoke是属于Control类的。正确的写法应该是: 1 private void btnStart_Click(object sender, EventArgs e) 2 { 3 xDel xd = new xDel(t => 4 { 5 Thread