Если я пытаюсь получить доступ к элементам управления 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!
});
}
Код продолжения atask.then() выполняется без исключения, если мы добавим task_continuation_context::use_current() в качестве второго параметра:
atask.then([this] ()
{
xamlStoryboard->Stop(); // now ok!
xamlImage->Source = ref new BitmapImage(); // now ok!
}, task_continuation_context::use_current());