動的 UI に関連するいくつかの質問を調べましたが、何が欠けているのかまだわかりません。さらに、タスクの使用方法に関するチュートリアルに従いましたが、理解はまだ限られています。これが私が達成したいことです:
私のアプリはバックグラウンドでいくつかの作業を行っていますが、UI をレスポンシブにしたいと考えています。次のことを試しました (コードを参照) が、ディスパッチャーが呼び出されるまで UI の更新が開始されません。UIステータスを次のようにしたい:
- 作成中... -- CreatePivotTableButton がクリックされるとすぐに
- 接続を確立しています... -- provider.GetReportData メソッドを呼び出す前に
- 結果に応じて接続成功または接続失敗
終わり。
<!-- language: lang-cs --> private void CreatePivotTableButton(object sender, RoutedEventArgs e) { this.StatusToBeDisplayed.Content = "Creating..."; this.DescriptionLabel.IsEnabled = false; this.TextBlockBorder.IsEnabled = true; List<CombinedData> items = (List<CombinedData>)CustomerComboBox.ItemsSource; List<int> selectedItems = new List<int>(); foreach (CombinedData item in items) { if (item.IsSelected) { selectedItems.Add(item.ReferenceId); } } PCTProvider provider = new PCTProvider(); ExportToExcel export = new ExportToExcel(); ExcelAutomation excelAutomation = new ExcelAutomation(); this.ResultTextBlock.Text = "Establishing Connection"; DataTable generateReportDataTable = provider.GetReportData(selectedItems); Excel.Workbook workbook = export.ExportDataTableToExcel(generateReportDataTable); Task updateTask = Task.Factory.StartNew(() => { Dispatcher.Invoke(new Action(() => excelAutomation.CreatePivotTable(workbook))); }).ContinueWith(result => { Dispatcher.Invoke(new Action(() => this.StatusToBeDisplayed.Content = "Done!")); Dispatcher.Invoke(new Action(() => OriginalStatus())); }, TaskScheduler.FromCurrentSynchronizationContext()); }
お時間とご協力をいただき、誠にありがとうございます。