Dot-Net
延遲調度呼叫?
在 WPF 中,由於界面更新方式的複雜性,我有時必須在短暫延遲後執行操作。
目前我只是通過以下方式做到這一點:
var dt = new DispatcherTimer(DispatcherPriority.Send); dt.Tick += (s, e) => { dt.Stop(); //DoStuff }; dt.Interval = TimeSpan.FromMilliseconds(200); dt.Start();但是每次都創建一個新的計時器有點難看,而且可能成本太大(?)從性能的角度來看,最好的做法是什麼,即最迅速地執行?以及將上述程式碼重寫為以下內容的好方法是:
this.Dispatcher.BeginInvoke(new Action(delegate() { //DoStuff }), DispatcherPriority.Send,TimeSpan.FromMilliseconds(200));Timespan 是延遲,感謝您的任何輸入:)
我不會認為它
DispatcherTimer是重量級的……為什麼不寫一個擴展方法Dispatcher,允許你使用你想要的語法,並DispatcherTimer在後台使用 a 呢?我個人會呼叫它DelayInvoke而不是BeginInvoke…而且我還將它修復為始終使用Action而不是任意委託…這將使使用 lambda 表達式更容易:Dispatcher.DelayInvoke(TimeSpan.FromMilliseconds(200), () => { ... });(如果將匿名函式用作方法呼叫中的最後一個參數,我傾向於發現它更具可讀性,但這只是個人喜好。)
鑑於您很可能大部分時間都希望使用毫秒,您也可以使用另一種輔助方法:
Dispatcher.DelayInvokeMillis(200, () => { ... });嘗試的另一種選擇是僅使用現有
BeginInvoke方法,但優先級非常低,因此只有在其他所有操作完成後才會呼叫您的委託。在不了解您的具體情況的情況下,很難知道這是否有效——但值得一試。