Перейдите на страницу TaskDialog после асинхронного вызова

#c# #asynchronous #.net-core #async-await #taskdialog

Вопрос:

Мне нужно перейти от одного TaskDialogPage к другому после завершения асинхронной операции. Вот мой код

 TaskDialogPage page = new()
{
    //...
}

TaskDialogPage completedPage = new()
{
    //...
}

page.Created  = async (_, _) =>
{
    await DoSomethingThatTakesTime().ConfigureAwait(false);
    page.Navigate(completedPage); // NotSupportedException - Illegal thread call 
};
 

Я мог бы использовать Control.Invoke() метод :

 page.Invoke(() => page.Navigate(completedPage))
 

Но TaskDialogPage не наследует от Control !

Ответ №1:

 await DoSomethingThatTakesTime().ConfigureAwait(true);
 

Понял. ConfigureAwait указывает, должна ли быть попытка вернуться к исходному контексту , т. Е. контексту пользовательского интерфейса. Даже несмотря ConfigureAwait(true) на то, что это значение по умолчанию и указано неявно, я думаю, что это лучше отражает намерение.