此代码导致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/

10-09 12:42