0

私はSharpBITS(http://sharpbits.codeplex.com/)を使用しています。これは、.NET用の適切に実行されているBITSラッパーです。よくわかりませんが、BITSはシングルスレッドアパートメント(STA)で実行する必要があると思います。古いバージョンでは、たとえば.NETコンソールアプリケーションのデフォルトであるマルチスレッドアパートメント(MTA)でBITSを実行するときに、いくつかの問題が発生しました。それについては、BITSのドキュメントやインターネットでは何も見つかりません。

SharpBITSでさえ、BitsManagerのコンストラクターでアパートメントの状態をSTAに設定しようとします(実際には、スレッドが開始される前にのみ可能です)。

BITSが本当にSTAで実行されなければならないかどうか誰かが知っていますか?現在のバージョンはMTAでも実行されるようです。

4

1 に答える 1

2

いいえ。BackgroundCopyManager コクラスのさまざまなバージョンがレジストリに登録されており、ThreadingModel キーが "Both" に設定されています。つまり、MTA スレッド (自分で作成した任意のスレッドまたはコンソール アプリのメイン スレッドのデフォルト) で作成でき、呼び出しはマーシャリングされません。また、STA スレッドで作成すると、呼び出しはそのスレッドにマーシャリングされます。

そして、はい、MTA は問題を引き起こす可能性があります。これは、独自のコードがスレッド セーフであることを確認する必要があるためです。STA スレッドから得られる多くの保証があり、実質的に COM が提供するスレッドセーフを借りることになります。MTA からそのような保証はありません。コードが BITS と同じくらいスレッドセーフであることを確認する必要があります。BITS から受け取る通知は典型的なトラブルメーカーであり、自分の状態を保護するにはロックが必要です。

于 2012-12-15T14:47:17.130 に答える