Silverlight完成工作后工作线程应该做什么?

时间:2012-07-27 18:31:02

标签: c# multithreading silverlight windows-phone-7 asynchronous

所以这是我的Windows Phone应用程序的问题。 我有第1页可以导航到第2页。OnNavigateTo我进行了异步调用。
这似乎没问题,第一次运行应用程序时,异步调用会创建一个新的工作线程并且对我来说很有用。
但我意识到,如果我回到第1页并重新调用问题,那么:现在我从异步调用中获得了一个新的工作线程,而旧的线程没有被终止。因此,两个工作线程之间存在竞争并导致我的应用程序出现问题。我没有对线程的直接控制,因为它们是由异步方法隐式创建的。

所以在这种情况下,任何人都有关于如何处理它的建议,或者是否存在处理这个问题的常见模式?

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属性来模仿行为(当你离开并测试你的行为时将其设置为真处理程序)。