1

このようなことをする方法はありますか?

背景: ボタンのクリックがあります。ボタンがクリックされると、「読み込み中」メッセージを表示し、いくつかの UI 作業を行う一連のコードを実行してから、「読み込み中」メッセージを閉じます。通常、数秒から 20 秒かかります。現時点では、読み込みメッセージはまったく表示されず、ボタン クリックのコードが完了するまで UI がフリーズします。

バックグラウンド ワーカーとディスパッチャについて読んだことがありますが、機能させることができませんでした。ボタンクリックのコードが他のあらゆる種類のコード(サードパーティのものを含む)を呼び出すためかどうかはわかりませんが、正しく実行することができませんでした. それでもすべて機能しますが、UI がフリーズし、読み込みメッセージが表示されません。

だから、これを回避する別の方法があるかどうか疑問に思っています。ボタンのクリック時に読み込み中のメッセージのみを表示し、その後 1 秒ほどで実行時間の長いプロセスを実行する別のイベントを起動するように設定することは可能ですか? そうすれば、UI は数秒間フリーズしますが、少なくとも「読み込み中」のメッセージが表示されます。

4

1 に答える 1

1

これは、 Dispatcher.BeginInvoke呼び出しで実行できるはずです。

private void ButtonClick(object sender, EventArgs e)
{
    ShowMyLoadingMessage(); // your code, not sure what it is
    Dispatcher.BeginInvoke(() =>
    {
       CallMyLongRunningCode(); // again, not sure what this is
       HideMyLoadingMessage();
    }
}

UIスレッドで実行されているため、これが最善の解決策であるとは思いませんが、あなたが求めていることを行う必要があります.

20 秒かかる長時間実行コードは何をしているのですか?

于 2012-04-24T22:57:23.650 に答える