我想讓我的UI在我的WPF應用程序中更具響應性。我用產卵使用Task.Factory.StartNew時更新UI標籤
Task.Factory.StartNew(() => RecurseAndDeleteStart());
在該方法中RecurseAndDeleteStart()
我要更新與被刪除的文件的UI標籤的新線程。
如何做到這一點?
我想讓我的UI在我的WPF應用程序中更具響應性。我用產卵使用Task.Factory.StartNew時更新UI標籤
Task.Factory.StartNew(() => RecurseAndDeleteStart());
在該方法中RecurseAndDeleteStart()
我要更新與被刪除的文件的UI標籤的新線程。
如何做到這一點?
由於它是WPF,您可以使用Dispatcher並調用Dispatcher.BeginInvoke
將回調封送到UI線程以更新標籤。
或者,你可以傳遞的TaskScheduler到你的方法,並用它如下更新標籤:
// This line needs to happen on the UI thread...
TaskScheduler uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew(() => RecurseAndDeleteStart(uiScheduler));
然後,你的方法裏面,當你想更新一個標籤,你可以這樣做:
Task.Factory.StartNew(() =>
{
theLabel.Text = "Foo";
}, CancellationToken.None, TaskCreationOptions.None, uiScheduler);
這將推動回調到UI線程的同步上下文。
您必須使用label.Dispatcher.BeginInvoke(delegate)
來調用不同線程中的任何內容,以改變標籤的內容。
完美!正是我在找什麼。 – Demetri 2011-05-20 18:36:04
+1表示可以在不同的計劃程序上運行子任務(另一個用於顯示「CancellationToken.None」的+1) - 我已經傳遞了新的CancellationToken(),但它似乎是破解!) – axeman 2013-08-19 20:15:11
正在工作偉大 – MonsterMMORPG 2015-01-01 00:50:04