Изключение при промяна на свойството Border от друга нишка

Имам компонент в WPF, този компонент използва граница и използвам свойството Background на границата, за да променя цвета на фона на целия компонент.

Проблемът е, че когато се опитам да редувам два различни цвята с таймер, се хвърлят изключения 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);

за да промените цвета на шрифта на етикета и всичко работи добре.

Благодаря и поздрави


person mastervv    schedule 25.01.2011    source източник


Отговори (2)


Алтернатива би била да дефинирате четките/анимациите като ресурси и да стартирате анимациите или да присвоите четките, когато е необходимо.

person Emond Erno    schedule 25.01.2011

Уверете се, че създавате и задавате стойности и за myBrush в нишката на потребителския интерфейс.

mainBorder, тъй като е граница, има афинитет към нишка. Въпреки това, Brush също има афинитет към нишката, т.к. той е извлечен от DispatcherObject.

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

person Reed Copsey    schedule 25.01.2011
comment
Разбира се!! прав си.. Благодаря, помогни, просто създадох myBrush в нишката на потребителския интерфейс. - person mastervv; 25.01.2011
comment
@sixlettervariables: Това, разбира се, ще работи - при условие, че OP не се опитва да промени стойностите на четката. - person Reed Copsey; 25.01.2011