我正在研究通过第三方COM库与外部设备通信的应用程序。我试图让设备的所有通信都通过后台线程来防止通信中出现的问题,从而破坏我的应用程序,并摆脱通过在UI线程中进行通信而引入的其他一些复杂性。UI线程阻塞调用COM对象的后台线程
问题是,无论何时发生导致主UI线程阻塞的事件(即MessageBox.Show被调用,甚至只是在窗口周围移动窗口),后台线程上的设备通信也会停止。
有没有什么办法(短缺完全独立的进程)将两条线程分开得足够远以至于它们不会互相干扰? (请注意,与一些数学计算完全相同的代码,可以稍微减慢一些效果,这只是在我使用COM库时才有问题)
这似乎很奇怪。没有看到你的代码,很难确切地知道为什么使UI线程忙碌减慢你的其他线程。工作线程上是否有可能正在等待UI线程执行某些操作的任何东西? – 2010-04-26 20:05:15
你的后台线程是否告诉UI使用'Invoke'弹出一个消息框? – Paolo 2010-04-26 20:08:52
@Paolo,听起来这比弹出一个消息框或类似的东西要频繁得多。据推测,他并没有弹出如此多的消息框来抓住窗口,并且移动它导致放缓。 :) – 2010-04-26 20:12:51