【问题标题】:COM Interop - Multi-Threading in a COM Callable WrapperCOM 互操作 - COM 可调用包装器中的多线程
【发布时间】:2011-04-07 23:08:02
【问题描述】:

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

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

【问题讨论】:

    标签: .net com-interop ccw


    【解决方案1】:

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

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


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

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

    【讨论】:

      猜你喜欢
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 2010-12-24
      相关资源
      最近更新 更多