По какой-то причине мне нужно выполнить 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, и всегда выдается эта ошибка: «Операция ввода-вывода была прервана из-за выхода из потока или запроса приложения».
Но если я удалю отдельнуючасть с резьбой (например, прямой вызов WaitForDataThread (), без использования метода WaitForData ()), все работает нормально.
Если вам интересно, зачем мне нужно создавать отдельный поток, это потому, что янеобходимо вызвать BeginReceive во время события, которое будет сгенерировано из другого потока из другого класса.Это почти то же самое, что создать новый поток, как в примере выше, и мне нужно, чтобы он работал.
Есть ли способ, которым я могу это сделать ??