我正在尝试停止在BackgroundWorker;
上运行的UDP侦听器,这是我的代码:
private void bw_DoWork(object senderx, DoWorkEventArgs e)
{
BackgroundWorker worker = senderx as BackgroundWorker;
while(true)
{
Debug.WriteLine("run");
if ((worker.CancellationPending == true))
{
Debug.WriteLine("cancel pending");
e.Cancel = true;
newsock.Close();
serverStatus = false;
break;
}
else
{
try
{
Debug.WriteLine("waiting for reponse..");
data = newsock.Receive(ref sender);
(STUCK HERE IF NO RESPONSE)
所以基本上,如果我没有得到UDP响应,它将卡在接收循环中,并且不会检查调用bw.CancelAsync()
。
我该如何解决这个问题
答案 0 :(得分:0)
您正在混合异步调用和同步调用。您需要使接收异步或重载CancelAsync()
函数以关闭套接字(这将使接收呼叫返回)。
如果你不能重载CancelAsync()
函数,那么你可以创建一个自定义取消函数来关闭套接字并调用CancelAsync()
。