我有一个UWP UI,调用需要一段时间才能执行的本机代码。完成后,UI需要更新。这是我的代码:
auto runOpti = create_task([this] { runOptimation(); });
runOpti.then([this]{postOptimation(); });
postOptimation例程包括以下行:
backwordCheckBox->IsChecked = params->backwards;
执行此操作会在标题中显示错误。
如何让postOptimation在UI线程中运行?
由于
答案 0 :(得分:1)
Sornel的好建议!这是有效的:
postOptimation中的代码:
Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::High,
ref new Windows::UI::Core::DispatchedHandler([this]()
{
backwordCheckBox->IsChecked = params->backwards;
}));
答案 1 :(得分:1)
您可以使用.then()
的重载task_continuation_context
,并将其设置为task_continuation_context::get_current_winrt_context()
。
使用Dispatcher
(其他答案)也可以,但这应该与PPL合作更好。
答案 2 :(得分:0)
使用Dispatcher属性的Invoke方法:backwordCheckBox-> Dispatcher-> Invoke。
因为我用.net做了一些事情,它已经安静了一段时间我不记得如何从lambda创建一个Action,但这就是你如何做到这一点。
答案 3 :(得分:0)
此代码将确保在与“backwordCheckBox”控件关联的UI线程上执行操作:
backwordCheckBox->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal,
ref new Windows::UI::Core::DispatchedHandler ([this, params]
{
backwordCheckBox->IsChecked = params->backwards;
}));