所以这是我的Windows Phone应用程序的问题。
我有第1页可以导航到第2页。OnNavigateTo
我进行了异步调用。
这似乎没问题,第一次运行应用程序时,异步调用会创建一个新的工作线程并且对我来说很有用。
但我意识到,如果我回到第1页并重新调用问题,那么:现在我从异步调用中获得了一个新的工作线程,而旧的线程没有被终止。因此,两个工作线程之间存在竞争并导致我的应用程序出现问题。我没有对线程的直接控制,因为它们是由异步方法隐式创建的。
所以在这种情况下,任何人都有关于如何处理它的建议,或者是否存在处理这个问题的常见模式?
答案 0 :(得分:1)
这取决于您发出异步请求的方式。如果您使用说WebClient
来执行DownloadStringAsync
之类的操作,则会看到您的WebClient
实例有一个方法CancelAsync
,可以在Completed
中设置已取消的属性{1}} 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
属性UserState
属性来模仿行为(当你离开并测试你的行为时将其设置为真处理程序)。