WP7 и Skydrive WaitOne блокируют все

Я пытаюсь загрузить файл из 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();
}

person user1122052    schedule 11.07.2012    source источник


Ответы (2)


Удалите вызов _autoEvent.WaitOne(), и будет вызвано событие получения завершения.

person Igor Ralic    schedule 11.07.2012

Скорее всего, вы блокируете поток пользовательского интерфейса. (помогло бы размещение большего количества кода) Попробуйте запустить первую часть в новом потоке, отличном от пользовательского интерфейса:

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>
});
person Jon    schedule 11.07.2012