私は次のものを持っています:
ThreadStart startThread =
delegate
{
mySocket.StartListen();
};
次の場合、mySocket は Listen() でループするようになりました。
new Thread(startThread).Start();
これが StartListen です。
public void StartListen()
{
Object locker = new Object();
// Lock resources
lock (locker)
{
S = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,
System.Net.Sockets.SocketType.Stream,
System.Net.Sockets.ProtocolType.Tcp);
S.Blocking = false;
try
{
S.Bind(serverEP);
S.Listen(1000);
isListening = true;
/*
* While statement not required here because AcceptConnection()
* method instructs the socket to BeginAccept() again...
*/
//while (true)
//{
connectDone.Reset();
S.BeginAccept(new AsyncCallback(AcceptConnection), Channel);
connectDone.WaitOne();
//}
}
catch (System.Net.Sockets.SocketException SockEx)
{
Console.WriteLine("*****[" + name + "] " + SockEx.SocketErrorCode + ":");
Console.WriteLine("*****[" + name + "] " + SockEx.Message);
}
}
}
非同期メソッドのため、物事は実際には「終了」せず、他の何かを続行するためのシグナルを返します。上記の Thread.Start() の後に実装するすべてのコマンドが正しく機能しません。たとえば、StartListen では、isListening = true
. スレッドを開始した後、プロパティ IsListening を使用したいと考えています。常に false として返されます。
スレッドを開始するにはどうすればよいですか。非同期メソッド (つまり、ThreadStart.BeginInvoke()) が望ましいでしょうか? それは ManualResetEvent を使用するのと似ていませんか?