WPFアプリケーションに単純なWPFボタンとテキストボックスがあります(MVCやバインディングをまったく使用していません)。ボタンをクリックすると、次のことができるようになります。
1) テキストボックスをクリアする
2) 結果を作成する
3)結果をテキストボックスに割り当てます
Textbox.Clear、TextBox.Text = String.Empty、デリゲート、およびディスパッチャのようなアプローチを使用しました
private void button_Click(object sender, RoutedEventArgs e)
{
Application.Current.Dispatcher.BeginInvoke(new Action (ClearReportTxtBox), DispatcherPriority.Send);
System.Threading.Thread.Sleep(5000);
runTest();
}
private void ClearReportTxtBox()
{
Report_textBox.Text = string.Empty;
}
それらのどれも私にとって正しく機能していません。ディスパッチャ メソッドは何とか機能していますが、私が望むようには機能していません。クリア タスクがキューに入れられ、ボタン クリック ハンドラーのすべてのアクションが終了すると、それが機能してテキスト ボックスを削除するように見えますが、これにより、生成されたレポートが既にテキスト ボックスに割り当てられています (runtest で作成された上記のコード) も削除されます。したがって、アクションを削除して結果全体を削除するのは遅すぎます。
現在、ボタンをクリックすると、UIthread がブロックして制御を引き継ぐように思えます。Dispatcher は、ボタンのクリックを終了した後、次のアクションとして削除アクションをキューに入れます。
最初に強制的に削除してから、残りを実行することは可能ですか? 私が到達したいのは、ボタン アクティビティを一時停止し、最初のアクションで削除を実行してから、ボタン ハンドラーの残りのアクションを続行することです。
私は何か間違ったことをしていますか?
よろしくお願いいたします。