1

古いMFCアプリケーションを維持しながら、WPFに新しい進行状況ダイアログバーを実装しました。アプリケーションは現在、多くのビジネス操作でビジーなUIスレッドを持っていますが、これを変更することは範囲外です。

文字列プロパティがその値を変更すると(TextBoxのテキストにバインドされる)、進行状況ダイアログは更新されません(スレッドがそれほどビジーでない場合のみ)。

プロパティの更新がUIスレッドから行われる限り、スレッドはダイアログを更新して次の処理に進む前に再描画できるはずなので、更新されない理由と修正方法がわかりません。それ。

何か案は?

編集:このソリューションの欠点は何ですか、私はそれを試しましたが、うまくいくようです:

private static Action EmptyDelegate = delegate() { };

public static void Refresh(this UIElement uiElement)
{
   uiElement.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate);
}
4

3 に答える 3

1

私はここで解決策を見つけました:

http://eprystupa.wordpress.com/2008/07/28/running-wpf-application-with-multiple-ui-threads/

次に、進行状況ダイアログで新しいスレッドを作成しました。

于 2012-12-20T12:03:23.243 に答える
0

アプリケーションは現在、多くのビジネス操作でビジーなUIスレッドを持っています

さてあなたの問題があります。あなたはそれをするべきではありません。UI以外のスレッドで長時間実行される操作を実行する必要があります。これが、長時間実行されている操作が終了するまでUIの更新が行われない理由です。

を使用するBackgroundWorkerと、進行状況が更新されて完了したイベントハンドラーのUIスレッドへのマーシャリングを処理するため、長時間実行されるタスクを実行しながらUIとの対話を簡素化できます。

于 2012-12-11T17:06:19.203 に答える
0

まず、@Servyに同意します。UIスレッドで重い作業を行うべきではありません。ただし、別のスレッドで作業を実行できない場合は、ダイアログ用に別のスレッドを生成することを検討できます。wpfウィンドウをどのように呼び出しているかはわかりませんが、このリンクから、C#でどのように行われるかについての手がかりが得られる場合があります。

于 2012-12-11T17:45:01.173 に答える