Исключение при изменении свойства Border из другого потока - PullRequest
2 голосов
/ 25 января 2011

У меня есть компонент в WPF, этот компонент использует границу, и я использую свойство фона Background, чтобы изменить цвет фона всего компонента.

Проблема заключается в том, когда я пытаюсь чередовать два разных цвета, с таймером, выдается invalidOperationException.Msgstr "Вызывающий поток не может получить доступ к этому объекту, потому что другой поток владеет им".На метод таймера я поместил код для изменения свойств границы в объекте Dispatcher.

            mainBorder.Dispatcher.BeginInvoke((ThreadStart)delegate() 
            {
                mainBorder.BorderBrush = myBrush;
               mainBorder.Background = myBrush;
            }, null);

но исключение выдается, и я не понимаю, что я делаю неправильно!Например, в то же время я делаю код

lbHolderServico.Dispatcher.BeginInvoke((ThreadStart)delegate()
{
    lbHolderServico.Foreground = new SolidColorBrush(HoldLabelsFontColor);
}, null);

, чтобы изменить цвет шрифта метки, и все работает отлично.

Спасибо и всего наилучшего

Ответы [ 2 ]

3 голосов
/ 25 января 2011

Убедитесь, что вы также создали и задали значения для myBrush в потоке пользовательского интерфейса.

mainBorder, будучи границей, имеет сродство к потоку.Однако Brush также имеет сходство с потоками, поскольку оно получено из DispatcherObject .

(Ваш второй пример работает, потому что вы создаете новую кисть в потоке пользовательского интерфейса, не используя созданный в другом месте ...)

1 голос
/ 25 января 2011

Альтернативой может быть определение кистей / анимаций как ресурсов и запуск анимации или назначение кистей при необходимости.

...