2012-07-27 25 views
1

所以這是我的Windows Phone應用程序的問題。
我有頁面1可以導航到頁面2.我做了一個異步調用。
這似乎是我第一次運行應用程序,異步調用創建一個新的工作線程,併爲我工作,這是很酷。
但我意識到,如果我回到頁面1並重新調用頁面2,問題就出現了:現在,我有一個來自異步調用的新工作線程,而舊的線程沒有終止。所以在兩個工作線程之間存在競爭並導致我的應用程序出現問題。
我沒有對線程的直接控制,因爲它們是由異步方法隱式創建的。Silverlight工作線程完成後應該做什麼?

那麼在這種情況下,任何人都有如何處理這個問題的建議,或者是否存在處理這個問題的共同模式?

+0

什麼是錯誤,請顯示一些代碼 – Les 2012-07-27 18:36:40

+0

有很多類型的異步調用,但它們傾向於成對,「開始」類型調用和「結束」調用,而常見模式是結束調用接收一個IAsyncResult對象。 – Les 2012-07-27 18:39:27

回答

1

這取決於您如何發出異步請求。如果您使用say,WebClient來做類似DownloadStringAsync的事情,您會看到您的WebClient實例有一個方法CancelAsync,它會將Completed事件處理程序中的取消屬性設置爲true。當你離開你的頁面並在你的處理程序中測試它時,請撥打CancelAsync,你應該很好。

// in some button handler or whereever 
webClient.DownloadStringAsync("http://url.com") 

void OnLeavePage(object sender, EventArgs e) { 
    webClient.CancelAsync(); 
} 

void OnCompleted(object sender, DownloadStringCompletedEventArgs e) { 
    if (e.Cancelled) { 
    return; 
    } 

    // do your handling 
} 

如果您還沒有CancelAsync您可以在具有Cancelled屬性模仿行爲UserState對象傳遞DO(其設置爲true,當你在你的處理器離開和測試)。

相關問題