0

通常は、UI スレッドで進行状況ウィンドウ (進行状況バー付き) を表示し、ワーカー スレッドから進行状況を更新します。

GUIスレッド自体で開始および実行される多くの長い操作があります(GUIを一時的にフリーズします)。要件は、既存のすべての長い操作の進行状況バーを表示することです。通常の解決策は、長い操作をスレッドとして移動し、そこから進行状況を更新することです。しかし、これらの長い操作のスレッドセーフについてはわかりません。

別のスレッドで進行状況ウィンドウを表示して (フリーズしないように)、メインの GUI スレッド自体から進行状況を更新する方法はありますか?

4

2 に答える 2

1

このスレッドを確認してください

私はあなたが使用する必要があると思いますApplication.DoEvents()

于 2012-09-12T07:17:48.067 に答える
1

別のスレッドで ProgressBar を表示する解決策はわかりませんが、実行時間の長い操作内からシステムにアクション (UI の更新) を実行させるハックを試すことができます。このために、長時間実行される操作内から次の関数を繰り返し呼び出すことができます。

public static void DoEvents() {
  DispatcherFrame frame = new DispatcherFrame();
  Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(delegate(object parameter) {
    frame.Continue = false;
    return null;
}), null);
  Dispatcher.PushFrame(frame);
}

ただし、これは問題を解決する良い方法ではないことに注意してください。適切なデザインを選択することをお勧めします。

于 2012-09-12T07:11:58.723 に答える