#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)
на то, что это значение по умолчанию и указано неявно, я думаю, что это лучше отражает намерение.