我有定期更新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)的简单代码,但无法正常工作 –