4

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

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

4

1 回答 1

2

是的,MSDN 文章托管和非托管线程解释了详细信息。尤其:

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


如果在上传或下载全部完成之前关闭托管应用程序,结果会是什么?

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

于 2011-04-07T15:08:02.033 回答