【发布时间】:2014-03-12 09:29:21
【问题描述】:
我正在编写一个像这样工作的客户端服务器应用程序:
Form1 加载并创建ServerHost。 ServerHost 开始监听TcpClient 连接,在连接和接受时,ServerHost 通过ThreadPool.QueueUserWorkItem(DoWork, client) 产生一个线程;
在DoWork() 线程中,我想更新Form1 上的Winform 控件。
这是通过在ServerHost 中设置事件来实现的,例如ServerHost.SomethingHappened。当DoWork() 中发生某些事情时,它会引发事件并调用 Form1.Handler 来更新 winforms 控件。
这个设置给了我cross-thread operation error。
Control.Invoke 和 Control.InvokeRequired 的使用是否健康?我不擅长线程,MSDN 说要使用BackgroundWorker,但我在这里看不到该怎么做。有什么建议可以更改结构以避免在此设置中使用 Invoke?
【问题讨论】:
-
随着使用的猖獗,尤其是在许多工作线程的情况下,BeginInvoke() 的危害性远低于 Invoke()。
标签: c# multithreading winforms thread-safety invoke