出於某種原因,我需要做的BeginReceive在一個單獨的線程,就像這個例子:BeginReceive在一個單獨的線程
public void WaitForData()
{
Thread t = new Thread(WaitForDataThread);
t.Start();
}
public void WaitForDataThread()
{
try
{
CSocketPacket theSocPkt = new CSocketPacket();
theSocPkt.thisSocket = m_socClient;
m_asynResult = m_socClient.BeginReceive(theSocPkt.dataBuffer, 0, theSocPkt.dataBuffer.Length, SocketFlags.None, OnDataReceived, theSocPkt);
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
但BeginReceive通話之後我一直收到錯誤,OnDataReceived是立即引發,在這種情況下,它將調用EndReceive方法,並且始終拋出此錯誤:「由於線程退出或應用程序請求,I/O操作已中止」。
但是,如果我刪除單獨的線程部分(如直接調用WaitForDataThread(),而不通過WaitForData()方法),一切工作正常。
如果您想知道爲什麼我需要創建一個單獨的線程,這是因爲我需要在從另一個類中的不同線程生成的事件期間調用BeginReceive。這與創建像上面示例這樣的新線程非常相似,並且我需要使其工作。
有沒有一種方法可以做到這一點?
我真的不明白爲什麼你必須創建一個新線程來啓動異步操作? – Jan 2010-12-20 17:44:14
我需要模擬其他類中的不同線程事件,因此創建新線程並調用BeginReceive與在不同線程中生成的事件中調用它相同。 – 2010-12-20 17:49:10
好吧,明白了:)看我的回答 – Jan 2010-12-20 18:15:51