0

WinFormsに最適な.Netコンポーネントを開発しました。このコンポーネントは、を使用して、SynchronizationContextマーシャリングの基になるスレッドからUIスレッドにイベントを発生させます(もちろん、コンポーネントはWindowsFormsSynchronizationContext自動的に取得し、それを使用してイベントをアプリケーションのUIスレッドに送信します)。

次に、このコンポーネントを再利用してntサービスを作成します。Windowsサービスは自動的に提供しないため、このコンポーネントの基になるスレッドで発生したすべてのイベントを単一のプロセッサスレッドにマーシャリングするために(およびその)SynchronizationContextを使用できると思いました。これは良いアプローチでしょうか?AsyncOperationManagerSynchronizationContext

私のテストではAsyncOperationManager.CreateOperation(null);、さまざまなスレッドからの呼び出しを使用して、投稿された非同期操作の動作を確認しました(1つの実行MyService.OnStart()メソッド...と、サービスで実行する内部処理スレッド)。驚いたことに、投稿された非同期操作のスレッドIDは常にMyService.OnStart()メソッドを実行するものだったので、おそらくSCMスレッドでした。

これに関するMSDNのドキュメントは不足していますAsyncOperationManager.CreateOperationが、呼び出し元のスレッドが非同期操作のマーシャリング先になると思いました。

誰かがここで光を当てることができますか?AsyncOperationManagerまた、これをWindowsサービスで使用するという私の意図に何か問題がありますか?他の方法は何ですか?

4

1 に答える 1

0

私は、他のスレッドから要求を受け取り、応答を返すプロセッサ スレッドで構成される独自のスレッド モデルを作成しました。

于 2013-12-20T16:15:15.350 に答える