[英]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.