0
我試圖阻止我正在上BackgroundWorker;
這裏運行UDP監聽器是我的代碼:BackgroundWorker的C#端口聽者
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()
。
我該如何解決這個問題
當代碼卡在接收呼叫中時,您的代碼不會看到CancellationPending。所以不要使用CancelAsync,而是關閉套接字。或者只是不要使用BGW,而是使用BeginReceive。 – 2013-03-24 17:42:52