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();
}
2 ответа
Скорее всего, вы блокируете поток пользовательского интерфейса. (размещение большего количества кода поможет) Попробуйте запустить первую часть в новом потоке без пользовательского интерфейса:
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>
});
Удалите вызов _autoEvent.WaitOne(), и будет получено событие get complete.