此代码导致Silverlight挂起。如果删除了ManualResetEvent代码,则什么也不会发生
private ManualResetEvent mre = new ManualResetEvent(false);
...
WebClient sender = new WebClient();
sender. += new OpenReadCompletedEventHandler(this.ReadComplete);
sender.OpenReadAsync(new Uri(this.url+"?blob="+BODY, UriKind.Relative));
mre.WaitOne();
}
public bool T = false;
public void ReadComplete(object sender, OpenReadCompletedEventArgs e)
{
mre.Set();
}
最佳答案
您无法阻止UI线程(请参阅“ mre.WaitOne”)。如果您绝对需要WaitOne,则必须在单独的线程中运行代码。可以按以下步骤完成:
var t = new Thread(delegate()
{
//...
mre.WaitOne();
//...
});
人们期望回调中的“ mre.Set()”会被触发。但是,我遇到了同样的问题,因此,显然,OpenReadAsync回调机制使用UI线程作为中间调度程序。无法进行分派,它正在等待事件设置。
关于silverlight - Silverlight异步api导致挂起和无响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2193173/