私はc#でTCPサーバアプリケーションを書いています。私はサーバーを実装するTcpCommunicationという名前のクラスを設計しました。次のようにスレッドを閉じる
public bool Connect()
{
...
listenThread = new Thread(new ThreadStart(ListenForClients));
listenThread.IsBackground = true;
listenThread.Start();
...
}
ListenForClients方法が実装されている:(ユーザーが決定)いくつかのケースで
private void ListenForClients()
{
while (true)
{
try
{
//blocks until a client connects to the server
clientObj = tcpListener.AcceptTcpClient();
//create a thread to handle communication with connected client
Thread clientThread = new Thread(new ThreadStart(Receive));
clientThread.IsBackground = true;
clientThread.Start();
}
...
}
}
Iを
private TcpListener tcpListener;
private TcpClient clientObj;
private Thread listenThread;
とconnect()メソッド:TcpCommunicationは、次のメンバーを保持します新しいクライアントの聴取をやめ、既存のクライアントのサービスを停止したいと考えています。 私の質問は:すべてのサブスレッドは、クリエイタースレッド(メインスレッドではない)が異常終了したときに中断しますか? すべてのスレッドのコレクションを保持し、それらを1つずつ中止する必要がありますか、または次の実装で十分ですか?
public bool Disconnect()
{
if (listenThread != null)
{
listenThread.Abort();
listenThread.Join();
}
tcpListener.Stop();
return true;
}