簡體   English   中英

Backgroundworker C#端口列表器

[英]Backgroundworker c# port listner

我試圖停止在BackgroundWorker;上運行的UDP偵聽器BackgroundWorker; 這是我的代碼:

  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()

我怎么解決這個問題

您正在混合異步調用和同步調用。 您需要使接收異步或重載CancelAsync()函數以關閉套接字(這將使接收調用返回)。

如果您無法重載CancelAsync()函數,則可以創建一個自定義的cancel函數,該函數關閉套接字並調用CancelAsync()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM