WinFormsに最適な.Netコンポーネントを開発しました。このコンポーネントは、を使用して、SynchronizationContext
マーシャリングの基になるスレッドからUIスレッドにイベントを発生させます(もちろん、コンポーネントはWindowsFormsSynchronizationContext
自動的に取得し、それを使用してイベントをアプリケーションのUIスレッドに送信します)。
次に、このコンポーネントを再利用してntサービスを作成します。Windowsサービスは自動的に提供しないため、このコンポーネントの基になるスレッドで発生したすべてのイベントを単一のプロセッサスレッドにマーシャリングするために(およびその)SynchronizationContext
を使用できると思いました。これは良いアプローチでしょうか?AsyncOperationManager
SynchronizationContext
私のテストではAsyncOperationManager.CreateOperation(null);
、さまざまなスレッドからの呼び出しを使用して、投稿された非同期操作の動作を確認しました(1つの実行MyService.OnStart()
メソッド...と、サービスで実行する内部処理スレッド)。驚いたことに、投稿された非同期操作のスレッドIDは常にMyService.OnStart()
メソッドを実行するものだったので、おそらくSCMスレッドでした。
これに関するMSDNのドキュメントは不足していますAsyncOperationManager.CreateOperation
が、呼び出し元のスレッドが非同期操作のマーシャリング先になると思いました。
誰かがここで光を当てることができますか?AsyncOperationManager
また、これをWindowsサービスで使用するという私の意図に何か問題がありますか?他の方法は何ですか?