出于某种原因,我需要做的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