繁体   English   中英

如何使COM控制中的代码屈服于其他进程?

[英]How to make code in COM control yield to other processes?

我在新的C#应用​​程序中使用了旧的COM组件(通信类库)。 COM控件处理与我们某些仪器的通信。 功能之一是下载数据,这取决于数据的大小,可能是一个相当长的操作。 新的C#应用​​程序设置为以线程形式进行下载。 问题是,当代码执行下载功能时,其他所有内容都会冻结,因此我无法在UI中单击“取消”按钮。 我在每个成功的块之后添加了一个Sleep()(尝试将0到1000的所有参数作为参数)调用到下载代码。 让我感到困惑的部分是,如果我的下载线程(而不是调用COM控件)只是在C#中执行无限循环,则可以取消此操作,因为UI处于活动状态。 有人对我可以尝试使下载线程产生收益有任何想法吗?

谢谢

如果COM组件的线程模型是STA,并且您正在主UI线程中创建它,然后调用从辅助线程下载数据的方法,则该调用将被编组并在UI线程上执行,并且基本上会阻塞您的应用程序。

STA COM组件需要在泵送消息的STA线程中创建,因为对该组件的所有调用都将在创建该组件的线程中进行编组和执行,而与实际调用COM组件上的方法的线程无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM