访问任务中的XAML控件的异常

时间:2012-05-10 08:48:19

标签: xaml windows-runtime winrt-xaml c++-cx

如果我尝试访问任务中的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());

1 个答案:

答案 0 :(得分:0)

您正在从UI / Dispatcher线程以外的线程调用UI元素。您需要使用control.Dispatcher.InvokeAsync()调用UI元素的方法,否则请确保不从后台线程调用它们。