gpt4 book ai didi

c# - UI 线程正在阻止调用 COM 对象的后台线程

转载 作者:太空狗 更新时间:2023-10-30 00:09:11 24 4
gpt4 key购买 nike

我正在开发一个通过第三方 COM 库与外部设备通信的应用程序。我试图让与设备的所有通信都通过后台线程进行,以防止通信问题搞砸我的应用程序,并消除因在 UI 线程中进行通信而引入的其他一些复杂性。

问题是,每当发生导致主 UI 线程阻塞的事情(即调用 MessageBox.Show 或什至只是在屏幕上移动窗口)时,后台线程上与设备的通信也会停止。

有什么方法(没有完全独立的进程)可以将两个线程分开得足够远,以免它们相互干扰? (请注意,带有一些数学计算的完全相同的代码可以稍微减慢速度,效果很好,只有当我使用 COM 库时才会出现问题)

最佳答案

如果满足以下两个条件,则可以解释您观察到的行为。

  • 第 3 方 COM 库旨在在单线程单元中运行
  • 您正在 UI 线程上从库中创建一个类的实例

由于 UI 线程在 STA(单线程单元)中运行并且 COM 类是在该线程上创建的,因此来自 UI 线程以外的线程对类的所有调用都将被编码到 UI 线程本身。如果 UI 线程被阻塞,那么所有对 COM 类的调用也将被阻塞。

关于c# - UI 线程正在阻止调用 COM 对象的后台线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2716456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com