4

.NET COM 呼び出し可能ラッパー DLL アセンブリでマルチスレッドを使用することは可能ですか?

たとえば、.NET FTP ライブラリを COM に公開する .NET アセンブリ dll があります。アップロード機能は現在、「ベスト エフォート」機能としてプログラムされています。アップロードまたはダウンロードが正常に完了したかどうかを示すために、イベントや戻り値を使用していません。これは、必要に応じて後で実装することを検討する可能性があります。.NET アセンブリ (私の非常に限られた理解では) は、これらのアップロードおよびダウンロード プロセスを別のスレッドに単純にファームアウトできますか? これが可能であると仮定すると、アップロードまたはダウンロードがすべて完了する前にホスティング アプリケーションが閉じられた場合、この結果はどうなるでしょうか?

4

1 に答える 1

2

はい、MSDN の記事Managed and Unmanaged Threadingで詳細が説明されています。特に:

相互運用性のために、共通言語ランタイムは、COM オブジェクトを呼び出すときにアパートメントを作成して初期化します。マネージ スレッドは、スレッドを 1 つだけ含むシングルスレッド アパートメント (STA)、または 1 つ以上のスレッドを含むマルチスレッド アパートメント (MTA) を作成して入力できます。COM アパートメントとスレッド生成アパートメントに互換性がある場合、COM では、呼び出し元のスレッドが COM オブジェクトを直接呼び出すことができます。アパートメントに互換性がない場合、COM は互換性のあるアパートメントを作成し、新しいアパートメントのプロキシを介してすべての呼び出しをマーシャリングします。


アップロードまたはダウンロードがすべて完了する前にホスティング アプリケーションを閉じた場合、この結果はどうなりますか?

良い質問。どのようにアプリケーションを終了していますか? 閉じているのが単なる GUI アプリケーションである場合、それらのスレッドがアクティブである限り、基になるプロセスは引き続き実行されると思います。アプリケーションの動作を確認するために、テスト プロジェクトを作成することをお勧めします。

于 2011-04-07T15:08:02.033 に答える