我有一個WPF窗口,需要對SizeChanged
事件做出反應。但是,只有在500毫秒時間內沒有進一步的SizeChanged
事件(類似於BindingBase.Delay
提供的行爲)時,它才應執行處理。但是,我注意到,當在調試模式下編譯爲x64時,此代碼會導致UI在調整大小時啓動滯後;在重繪的窗口中有明顯的延遲。我認爲這是由於OperationCanceledException
在UI線程上被序列化,拋出並被捕獲。下面的代碼消除了問題:等待太慢;異步方法可以忽略取消嗎?
Task.Delay(500, lastCts.Token).ContinueWith(
_ =>
{
myTextBox.Text = string.Format("({0},{1})", this.Width, this.Height);
},
lastCts.Token,
TaskContinuationOptions.NotOnCanceled,
TaskScheduler.FromCurrentSynchronizationContext());
我的問題是:是否有配置異步方法在UI線程上,才恢復處理,如果等待任務未取消的一個乾淨的方式?或者是這種邊界情況之一,由於事件發生的頻率,我們不應該使用等待,而是恢復到可提供更多控制的舊ContinueWith
模式(如TaskContinuationOptions.NotOnCanceled
)?
檢查[this](http://stackoverflow.com/q/21611292/1768303)。您可以以非常相似的方式使用'AsyncOp'。 – Noseratio