COM Interop - COM可调用包装器中的多线程

时间:2011-04-07 14:53:16

标签: .net com-interop ccw

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

例如,我有一个.NET程序集dll,它将.NET FTP库暴露给COM。上传功能目前被编程为“尽力而为”功能。我没有使用事件或返回值来显示上传或下载是否成功完成,这是我可能考虑在以后必要时实施的内容。 .NET程序集(在我真正有限的理解中)是否可以将这些上载和下载过程简化为另一个线程?假设这是可能的,如果托管应用程序在上传或下载全部完成之前关闭了,那会是什么结果呢?

1 个答案:

答案 0 :(得分:2)

是的,MSDN文章Managed and Unmanaged Threading解释了详细信息。特别是:

  

对于互操作性,公共语言运行库在调用COM对象时创建并初始化公寓。托管线程可以创建并进入仅包含一个线程的单线程单元(STA),或包含一个或多个线程的多线程单元(MTA)。当COM公寓和线程生成的公寓兼容时,COM允许调用线程直接调用COM对象。如果公寓不兼容,COM会创建一个兼容的公寓,并通过新公寓的代理人拨打所有电话。

<小时/>

  

如果主机应用程序在上传或下载全部完成之前关闭了会有什么结果呢?

好问题。你是如何终止申请的?如果它只是一个关闭的GUI应用程序,我认为只要这些线程处于活动状态,底层进程就会继续执行。我建议您创建一个测试项目来确认应用程序的行为。