UI を定期的に更新する長い検索操作があります (発生の検出 -> UI の更新)
私はそれを多くの方法で実現しようとしました:
非同期/待機
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()); }
バックグラウンドワーカー
使用したいが、.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))); } }
スレッドの完了後にすべてのデータを書き込むすべてのメソッド。UIをブロックしてプログラムを遅くすることなく、定期的にUIを更新するバックグラウンドタスクを実行する方法はありますか?