1

別のバックグラウンドスレッドを実行するWindowsサービスがあります。スレッド内で、TcpListenerを使用してクライアントをリッスンするTCPサーバーを起動します。

次のようなブロッキング読み取りがある場合に、サービスを正常に終了する方法を知りたいです。

listener.AcceptTcpClient();

Windowsサービスは、バックグラウンドスレッドとして設定されている限り、他のスレッドを中止できるようですが、スレッドの1つがブロックされている場合はどうなりますか?これは違いを生みますか?もしそうなら、この状況に対処するための最良の方法は何ですか?

4

1 に答える 1

0

最善の方法はlistener.Close()、サービスの停止イベントを呼び出すことです。でブロッキング呼び出しを中止しSocketExceptionます。

スレッドの状態 (ブロックまたは実行中) は、スレッドがバックグラウンドであるという事実には影響しません。そのため、バックグラウンド スレッドから呼び出しlistener.AcceptTcpClient()た場合、サービスが停止すると中断されます。

于 2013-02-04T11:19:28.123 に答える