我收到错误(来自HRESULT的异常:0x8001010E(RPC_E_WRONG_THREAD))。
这里应该是什么问题,我的资深开发人员说我需要将它设置为UI线程,这是我的代码:
private bool CanPrintReceipt() {
return _receipt != null && !IsBusy;
}
private async void PrintReceipt() {
IsBusy = true;
try {
await _printReceiptInteractor.PrintTerminalReceiptAsync(_receipt).ConfigureAwait(false);
Dispatcher.Dispatch(() => {
this.Close();
});
} catch (Exception e) {
_log.Error($"{nameof(PrintReceipt)}: ", e);
await this._dialogService
.ShowMessageOKAsync(e.Message, "Printer Error");
} finally {
IsBusy = false; // but when i set this to true , no error
}
}
我的其他课程出错了,
public void RaisePropertyChanged([CallerMemberName]string propertyName = null)
{
if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
return;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); //here it shows that error
}
你们认为问题是什么?没有RunAsync,我看到了另一个解决方案
谢谢,
尼科
答案 0 :(得分:2)
问题在于.ConfigureAwait(false)
。
它的作用是将continueOnCapturedContext
设置为false
,这意味着在调用异步函数的awit
之后继续评估函数不一定是相同的线程。
所以在你的情况下,你不需要它,因为这正是你所需要的 - 在它完成后在同一个线程中恢复。
总的来说,简单的经验法则是:
.ConfigureAwait(false)
是一般用途且不处理用户界面详细信息:MSDN - Async/Await - Best Practices in Asynchronous Programming