从后台线程到主线程的转换控制

时间:2009-03-17 07:36:36

标签: c# multithreading

我有监控设备状态的线程(使用i / o)。这将触发事件到几个UI(表单/对话框..)部分有关连接状态(已连接,已断开连接,故障)。根据此状态,表单和对话框将被销毁,创建,启用和禁用。

我的问题:

   I getting Cross-Thread exception because the thread doing the operations like Dispose the from, create the from .... .  I using smart client, forms and dialogs are part of the WorkItemController and i just terminating that. 

我不希望你使用Invoke或BeginInvoke。我希望这个线程继续只监视状态。因此,该线程必须将其控制权交给主线程,主线程将关闭表单或创建表单。

我想要如何将控件从一个线程转移到另一个线程。有什么办法吗?

1 个答案:

答案 0 :(得分:1)

最佳解决方案是使用Invoke切换回您的主线程。

或者如果你可以使用主线程和后台线程之间共享的全局变量,但这意味着你的主线程应该检查循环中的变量,这可能会挂起GUI。

或者在主线程中执行时使用System.Windows.Forms.Timer。