我正在为WP8中的Sky Drive开发一个演示应用程序。我在if条件中出错:
if (client == null && cbSync.IsChecked==true )
{
Auth();
LiveOperationResult res = await client.UploadAsync("me/skydrive", fileName, e.ImageStream, OverwriteOption.Overwrite);
}
else if((bool)cbSync.IsChecked==true)
{
LiveOperationResult res= await client.UploadAsync("me/skydrive", fileName, e.ImageStream,OverwriteOption.Overwrite);
}
答案 0 :(得分:1)
很难确定,但看起来这个代码是在后台线程上执行的,但是必须从UI线程访问UI对象。
我认为最干净的解决方案是使用Task
将事件转换为TaskCompletionSource
。然后,在启动最终触发事件的操作的代码中,您将await
Task
,然后执行当前在事件处理程序中的代码。
这样,代码在UI线程中执行(因此您可以访问那里的UI对象),并且它的结构也更好(所有相关代码都在一个方法中)。
如果这对你不起作用,你可以从UI线程调用TaskFactory.FromCurrentSynchronizationContext()
,保存生成的TaskFactory
,然后在事件处理程序中使用它来运行UI线程上的代码。