Backgroundworker c#端口监听器

时间:2013-03-24 17:02:46

标签: c# port backgroundworker

我正在尝试停止在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()

我该如何解决这个问题

1 个答案:

答案 0 :(得分:0)

您正在混合异步调用和同步调用。您需要使接收异步或重载CancelAsync()函数以关闭套接字(这将使接收呼叫返回)。

如果你不能重载CancelAsync()函数,那么你可以创建一个自定义取消函数来关闭套接字并调用CancelAsync()