根據https://stackoverflow.com/a/11378213/892770上的說明,我為我的 WPF 應用程式注冊了一個全域熱鍵,如下所示:
this.helper = new WindowInteropHelper(this);
this.source = HwndSource.FromHwnd(this.helper.Handle);
this.source.AddHook(this.HwndHook);
我想從熱鍵處理程式進行異步呼叫,以允許我避免掛起 UI 執行緒并逐步更新視窗,例如:
private async Task OnHotKeyPressed()
{
this.MyText = "Loading...";
this.MyText = await CallRestApi();
}
不幸的是,我無法弄清楚如何做到這一點。AddHook 方法沒有異步方法的多載,如果我將處理程式包裝在 .Result 或 AsyncContext.Run(...) 中,則 UI 在整個方法完成之前不會更新。有任何想法嗎?謝謝!
uj5u.com熱心網友回復:
AddHook 方法沒有異步方法的多載...
不,它沒有,對此您無能為力,即您無法更改同步 API。
但是由于hook引數表示將接收所有視窗訊息的事件處理程式,您仍然可以像您已經在做的那樣異步實作事件處理程式:
private async void OnHotKeyPressed() { ... }
如前所述,一般準則是避免async回傳void除無法回傳任何其他內容的事件處理程式之外的方法。換句話說,在事件處理程式中使用asyncand關鍵字是完全可以的。await
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/448919.html
