C# Silverlight工作线程在完成工作后应该做什么?
这就是我的Windows Phone应用程序的问题。C# Silverlight工作线程在完成工作后应该做什么?,c#,multithreading,silverlight,windows-phone-7,asynchronous,C#,Multithreading,Silverlight,Windows Phone 7,Asynchronous,这就是我的Windows Phone应用程序的问题。 我有第1页可以导航到第2页。在第2页OnNavigateTo中,我进行了一个异步调用。 这在我第一次运行应用程序时似乎还可以,异步调用创建了一个新的工作线程,并为我工作,这很酷但是我意识到,如果我返回到第1页并重新调用第2页,问题就会出现:现在我从异步调用中获得了一个新的工作线程,而旧的工作线程没有终止。因此,两个工作线程之间存在争用,这会给我的应用程序带来问题我无法直接控制线程,因为它们是由异步方法隐式创建的 因此,在这种情况下,是否有人对
我有第1页可以导航到第2页。在第2页
OnNavigateTo
中,我进行了一个异步调用。
这在我第一次运行应用程序时似乎还可以,异步调用创建了一个新的工作线程,并为我工作,这很酷
但是我意识到,如果我返回到第1页并重新调用第2页,问题就会出现:现在我从异步调用中获得了一个新的工作线程,而旧的工作线程没有终止。因此,两个工作线程之间存在争用,这会给我的应用程序带来问题
我无法直接控制线程,因为它们是由异步方法隐式创建的
因此,在这种情况下,是否有人对如何处理该问题提出了建议,或者是否存在处理该问题的通用模式?这取决于您发出异步请求的方式。如果您使用say,
WebClient
执行类似于DownloadStringAsync
的操作,您将看到WebClient
实例有一个方法CancelAsync
,该方法将已完成的事件处理程序中的cancelled属性设置为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
对象,该对象具有一个Cancelled
属性来模拟行为(离开并在处理程序中测试时将其设置为true) 这取决于您发出异步请求的方式。如果您使用say,WebClient
执行类似于DownloadStringAsync
的操作,您将看到WebClient
实例有一个方法CancelAsync
,该方法将已完成的事件处理程序中的cancelled属性设置为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
对象,该对象具有一个Cancelled
属性来模拟行为(离开并在处理程序中测试时将其设置为true) 错误是什么,显示一些代码请有多种类型的异步调用,但它们往往是成对的,“开始”类型调用和“结束”调用,常见的模式是结束调用接收IAsyncResult对象。错误是什么,显示一些代码请有多种类型的异步调用,但它们往往是成对的“开始”键入call和“end”调用,常见的模式是end调用接收一个IAsyncResult对象。