0

私は、コードで構築し、ユーザー コントロールを設定する Panel を持っています。データの取り込みが完了したら、メイン GUI にイベントを発生させ、データの取り込みが完了したことを伝え、スタック パネルを渡します。

次に、このパネルをコンテナー グリッドに追加します。

私が試してみました

   grdPbContent.Dispatcher.Invoke(
       DispatcherPriority.Normal, 
       new Action<StackPanel>(
           delegate(StackPanel _sp)
           {
                grdPbContent.Children.Add(_sp);
           }
       ),
       sp);`

また、空のデリゲートオプションですが、常にから例外が発生しますTargetOfInvocation

私は何を間違っていますか?

4

2 に答える 2

0

何が間違っているのかわかりませんが、ディスパッチャーを使用するだけで機能するはずです。パネルを含むウィンドウのディスパッチャーを使用してみてください。

MyWindow.Dispatcher.Invoke((Action)delegate 
    {
        MyWindow.grdPbContent.Children.Add(_sp);
    });
于 2012-06-20T17:47:48.283 に答える
0

WPF オブジェクトは、それらを作成したスレッド以外のスレッドでは変更できないため、あるスレッドで を作成して、別のスレッドで作成された にStackPanel追加することはできません。Grid

バックグラウンドで処理を行うには、 を使用して、次のように別のDispatcherPriorityDispatcherでコードを実行します。Background

を使用Application.Current.Dispatcherして、コードのどこからでも現在のアプリケーションの UI スレッドを取得できます。

実行される優先度に関係なく UI をロックする非常に長いプロセスの場合は、別のスレッドからのみデータを取得し、データが返されたらメイン UI スレッドで UI オブジェクトを構築します。

于 2012-06-20T19:27:35.677 に答える