我有以下内容:
ThreadStart startThread =
delegate
{
mySocket.StartListen();
};
mySocket 现在在 Listen() 上循环,当我:
new Thread(startThread).Start();
这是开始监听:
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 吗?