0

我正在使用 SharpBITS (http://sharpbits.codeplex.com/),这是一个运行良好的 .NET BITS 包装器。我不太确定,但认为 BITS 必须在单线程单元 (STA) 中运行。对于旧版本,我在多线程单元 (MTA) 中运行 BITS 时遇到了一些问题,例如 .NET 控制台应用程序的默认设置。我在 BITS 文档或 Internet 上没有找到任何相关信息。

甚至 SharpBITS 也尝试将 BitsManager 的构造函数中的单元状态设置为 STA(实际上只有在线程启动之前才有可能)。

有人知道 BITS 是否真的必须在 STA 中运行?当前版本似乎也可以在 MTA 中运行。

4

1 回答 1

2

不,BackgroundCopyManager coclass 的各种版本在注册表中注册,ThreadingModel 键设置为“Both”。这意味着您可以在 MTA 线程中创建一个(默认为您自己创建的任何线程或控制台应用程序的主线程),并且不会编组调用。如果您在 STA 线程中创建一个,则调用将被编组回该线程。

是的,MTA 会产生问题,因为现在由您来确保您自己的代码是线程安全的。您可以从 STA 线程获得很多保证,实际上您借用了 COM 提供的线程安全性。MTA 没有这样的保证,您必须确保您的代码与 BITS 一样是线程安全的。您将从 BITS 获得的通知将是典型的麻烦制造者,需要锁定以保护您自己的状态。

于 2012-12-15T14:47:17.130 回答