0

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 は、ボタンのクリックを終了した後、次のアクションとして削除アクションをキューに入れます。

最初に強制的に削除してから、残りを実行することは可能ですか? 私が到達したいのは、ボタン アクティビティを一時停止し、最初のアクションで削除を実行してから、ボタン ハンドラーの残りのアクションを続行することです。

私は何か間違ったことをしていますか?

よろしくお願いいたします。

4

1 に答える 1