私はWPFのコンポーネントを持っていましたが、このコンポーネントはボーダーを使用し、ボーダーのBackgroundプロパティを使用してコンポーネント全体の背景色を変更します。他のスレッドからボーダープロパティを変更すると例外が発生する
問題は、2つの異なる色の間で、タイマーで代替を試みると、invalidOperationExceptionがスローされます。 "呼び出し元のスレッドは、別のスレッドが所有しているため、このオブジェクトにアクセスできません"。タイマーメソッドでは、私はDispatcherオブジェクトの境界線のプロパティを変更するコードを配置します。
mainBorder.Dispatcher.BeginInvoke((ThreadStart)delegate()
{
mainBorder.BorderBrush = myBrush;
mainBorder.Background = myBrush;
}, null);
例外はスローされ、私は間違って何を理解していない!たとえば、同じ時間に私はそれを行うコード
lbHolderServico.Dispatcher.BeginInvoke((ThreadStart)delegate()
{
lbHolderServico.Foreground = new SolidColorBrush(HoldLabelsFontColor);
}, null);
ラベルのフォントの色を変更するとすべて正常に動作します。
おかげで、あなたが作成していることを確認してくださいし、同様に、UIスレッド上でmyBrush
の値を設定
オフコース! UIスレッドでmyBrushを作成してくれてありがとう。 – mastervv
'' Brush'を 'フリーズ'します。 – user7116
@sixlettervariables:もちろん、それは働くでしょう - OPはブラシの値を変更しようとしていません。 –