我有定期更新UI長搜索操作(發現occurence - >更新UI)長後臺進程令人耳目一新的UI WPF
我試圖實現其許多方面:
異步/ AWAIT
public void PushButton() { await AsyncSearchAll(); } public async Task AsyncSearchAll(SearchPanelViewModel searchPanelViewModel, SearchSettings searchSettings, CancellationToken cancellationToken) { await Task.Factory.StartNew(() => { //searching for occurence //write it into panel }, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()); }
BackgroundWorker的
我想使用它,但我不知道想只用.ReportProgress()
簡單的後臺線程訪問UI與調用
Dispatcher.BeginInvoke(()=>{//updating UI})
/// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow { public MainWindow() { InitializeComponent(); } private void ButtonBase_OnClick(object sender, RoutedEventArgs e) { var backgroundThread = new Thread(CountToTen) { IsBackground = true }; backgroundThread.Start(); } private void CountToTen() { for (int i = 1; i <= 10000; i++) { var j = i; Dispatcher.BeginInvoke(new Action(() => Seconds.Text = j.ToString(CultureInfo.InvariantCulture))); } }
所有的方法來完成線程後寫的所有數據。 有沒有任何方法來運行後臺任務,定期更新用戶界面,而不會通過阻止用戶界面來減慢程序?
哪種方法提供了期望的結果? – takayoshi
2和3是。但是如果ReportProgress對您來說不夠用,那就使用Dispatcher。 –
請向我們展示(3)的簡單代碼,但無法正常工作 –