如果我尝试访问任务中的XAML控件(然后是task :: then),我的Metro XAML应用程序总是会停止并出现异常。相同的代码在任务之外没有任何问题。我没有找到任何答案 - 我错过了什么?
VS11调试器报告:Concurrency :: unobserved_task_exception
异常:应用程序调用了为不同线程编组的接口。
非常感谢您的帮助!
void MyClass::MyMemberFunction()
{
xamlStoryboard->Stop(); // ok
xamlImage->Source = ref new BitmapImage(); // ok
task<void> atask([this] ()
{
xamlStoryboard->Stop(); // exception!
xamlImage->Source = ref new BitmapImage(); //exception!
});
atask.then([this] ()
{
xamlStoryboard->Stop(); // exception!
xamlImage->Source = ref new BitmapImage(); //exception!
});
}
如果我们添加task_continuation_context :: use_current(),atask.then()延续代码无异常运行 作为第二个参数:
atask.then([this] ()
{
xamlStoryboard->Stop(); // now ok!
xamlImage->Source = ref new BitmapImage(); // now ok!
}, task_continuation_context::use_current());
答案 0 :(得分:0)
您正在从UI / Dispatcher线程以外的线程调用UI元素。您需要使用control.Dispatcher.InvokeAsync()调用UI元素的方法,否则请确保不从后台线程调用它们。