0

我正在尝试从 SkyDrive 下载文件并将异步调用包装在同步类中。然而,当我打电话给 WaitOne 时,一切都被阻止了,EventHandeler 永远不会被调用。

 _client = new LiveConnectClient(connection.Session);
 _client.GetCompleted += new EventHandler<LiveOperationCompletedEventArgs>(client_GetCompleted);
 _client.GetAsync("me/skydrive/files");

 _autoEvent.WaitOne();  //get's stuck here client_GetCompleted never called.

....


void client_GetCompleted(object sender, LiveOperationCompletedEventArgs e)
{
    ///do stuff
    _autoEvent.Set();
}
4

2 回答 2

0

删除 _autoEvent.WaitOne() 调用,将引发 get completed 事件。

于 2012-07-11T06:47:00.163 回答
0

您很可能阻塞了 UI 线程。(发布更多代码会有所帮助)尝试在新的非 ui 线程中运行第一部分:

System.Threading.ThreadPool.QueueUserWorkItem(o =>
{
    _client = new LiveConnectClient(connection.Session);
    _client.GetCompleted +=
    new EventHandler<LiveOperationCompletedEventArgs>(client_GetCompleted);
    _client.GetAsync("me/skydrive/files");

   _autoEvent.WaitOne();  //get's stuck here client_GetCompleted never called.

   <other code>
});
于 2012-07-11T07:20:28.010 回答