COM互操作 - COM可调用包装器中的多线程

4

在.NET COM可调用包装器DLL程序集中使用多线程是否可能?

例如,我有一个.NET程序集DLL,它向COM公开了一个.NET FTP库。上传功能当前是“尽力而为”的功能。如果需要的话,我可以考虑稍后实现使用事件或返回值来显示上传或下载是否成功完成。在我的非常有限的理解中,.NET程序集是否可以将这些上传和下载过程简单地分配到另一个线程中?假设这是可能的,如果主机应用程序在所有上传或下载完成之前关闭,会发生什么呢?

1个回答

2
是的,MSDN文章托管和非托管线程解释了详细信息。特别是:
为了实现互操作性,公共语言运行时在调用COM对象时创建和初始化公寓。托管线程可以创建并进入包含一个或多个线程的多线程公寓(MTA)或仅包含一个线程的单线程公寓(STA)。当COM公寓和线程生成的公寓兼容时,COM允许调用线程直接向COM对象发出调用。如果公寓不兼容,则COM创建一个兼容公寓,并通过新公寓中的代理进行所有调用的封送处理。


这是一个很好的问题。如果在上传或下载完成之前关闭了托管应用程序,会出现什么结果呢?你是如何终止应用程序的?如果只是关闭 GUI 应用程序,我认为底层进程将继续执行,只要这些线程仍然处于活动状态。建议您创建一个测试项目来确认您的应用程序的行为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接