2

バックグラウンド プレゼンター スレッドから更新する必要がある UI コードがいくつかあります。バックグラウンド スレッドから、UI でプロパティを設定します。

_ui.ConnectionStatus = "A";

次に、私のセットは次のとおりです。

public string ConnectionStatus
{
    set
    {
        if (Dispatcher.CheckAccess())
            ConnectionStatusTxt.Content = value;
        else
        {
            Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
                              {ConnectionStatusTxt.Content = value;}));
        }
    }
}

次のエラーが表示されます。

The calling thread cannot access this object because a different thread owns it.

私の理解ではDispatcher、さまざまなスレッドでの呼び出しを処理するので、このエラーは私を少し困惑させます。ありがとう!

4

2 に答える 2

5

別の質問: 値の型は何ですか? これは文字列ですか?エラーは、値が実際には作成した UIElement (おそらくラベル?) である可能性があると想像できます。この場合、例外は値オブジェクトを参照し、ユーザー コントロールを参照しません。

于 2009-02-06T00:49:12.350 に答える
0

このセッターが内部で実行しているオブジェクトはわかりませんが、このオブジェクトのディスパッチャーは ConnectionStatusTxt のディスパッチャーと同じではないようです。つまり、セッターを含むオブジェクトは、ConnectionStatusTxt コントロールとは異なるスレッドによって所有されています。

CheckAccess および Invoke ステートメントで ConnectionStatusTxt.Dispatcher を使用してみてください。

于 2009-02-06T00:27:52.673 に答える