gpt4 book ai didi

c# - 失去通讯时Compact Framework上的问题

转载 作者:行者123 更新时间:2023-12-03 12:06:33 26 4
gpt4 key购买 nike

手持设备出现问题,该设备应该正在监听来自服务器应用程序的消息。当设备断开与服务器所在网络的连接时,此后台工作程序(从OpenNetCF实现)将停止响应。我将消息放置在ProgressChanged和RunWorkerCompleted事件中,以查看它们何时引发,以及在while循环中,循环终止之后以及所有异常中的RecieveFrom之后的以下代码中。我没有看到来自异常的消息,也没有看到while循环之后的消息,并且消息在连接丢失后停止了。通过在可见标签中设置文本来显示所有消息,同时更改标签的背景颜色,以便我可以查看循环是否正在运行。即使重新获得连接后,该循环似乎也停止运行,并且尝试重新运行backgroundworker会生成“已在使用中”异常。那么,为什么 worker 在继续奔跑时会停止响应呢?

  private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker wWorker = (BackgroundWorker)sender;
byte[] wBytes = new Byte[4096];
string wsReceive;
EndPoint wRemoteEP = (EndPoint)new IPEndPoint(IPAddress.Any, 0);

try
{
while (true)
{
if (wWorker.CancellationPending)
{
break;
}

mSocket.ReceiveFrom(wBytes, ref wRemoteEP);
if (wBytes.Length < 1)
{
continue;
}
wsReceive = Encoding.ASCII.GetString(wBytes, 0, wBytes.Length);

wWorker.ReportProgress(0, wsReceive);
}
mSocket.Close();
}
catch (ThreadAbortException)
{
}
catch (ThreadStateException)
{
}
catch (Exception E)
{
MessageBox.Show(E.Message, "Communication Error");
}
}

最佳答案

the docs on Socket.ReceiveFrom 开始:

If no data is available for reading, the ReceiveFrom method will block until data is available



因此,当通信丢失时,您将无法接收,并且ReceiveFrom调用会无限期阻塞。它会在等待数据时停止报告任何内容,但是该线程仍然处于 Activity 状态,因此无法重新运行BackgroundWorker。

关于c# - 失去通讯时Compact Framework上的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6227389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com