C# 通过线改变画笔颜色的属性

C# 通过线改变画笔颜色的属性,c#,multithreading,silverlight,C#,Multithreading,Silverlight,我有一个画笔的颜色,我想改变每一个某某线程 static SolidColorBrush myBrush; Thread changeColourThread = new Thread(changeColour); static void changeColour() { myBrush = new SolidColorBrush(Color.FromArgb(255, 33, 96, 22)); } 这将返回UnauthorizedAccessException,处理此异常

我有一个画笔的颜色,我想改变每一个某某线程

static SolidColorBrush myBrush;

Thread changeColourThread = new Thread(changeColour);

static void changeColour()
{
       myBrush = new SolidColorBrush(Color.FromArgb(255, 33, 96, 22));
}
这将返回UnauthorizedAccessException,处理此异常的最佳方法是什么


谢谢

您需要使用dispatcher,请尝试

您需要使用调度程序,请尝试

似乎必须在UI线程中创建
SolidColorBrush
(不知道为什么)。我遇到了类似的问题,我的解决方案是只返回
Color
,然后在
中使用
Converter
将其转换为
画笔
。xaml

看起来创建
SolidColorBrush
必须在UI线程中完成(不知道为什么)。我遇到了类似的问题,我的解决方案是只返回
颜色
,然后使用
转换器
将其转换为
中的
画笔
。xaml

当然,您也可以使用backgroundworker类,该类可以在运行期间的某些点向UI线程报告operations@Mark:是的,那也很好。我希望在内部使用dispatcher.hmmm,我想知道,我的印象是dispatcher只是将操作添加到dispatcher队列中,在UI线程可用时处理这些操作。其中,BackgroundWorker类向调用线程(可能不是UI线程)报告,调用线程对消息执行任何操作。虽然不是100%确定…反射层中出现峰值,但BackgroundWorker在引发ProgressChanged事件时似乎调用了ThreadPool.QueueUserWorkItem,其中as Dispatcher引发OperationPosted事件,因此可能要由附加到该事件的任何组件将消息发送到正确的线程上。当然,您也可以使用backgroundworker类,该类可以在其运行期间的特定时间点向UI线程报告operations@Mark:是的,那也很好。我希望在内部使用dispatcher.hmmm,我想知道,我的印象是dispatcher只是将操作添加到dispatcher队列中,在UI线程可用时处理这些操作。其中,BackgroundWorker类向调用线程(可能不是UI线程)报告,调用线程对消息执行任何操作。虽然不是100%确定…反射层中有一个峰值,但它看起来像BackgroundWorker在引发ProgressChanged事件时调用ThreadPool.QueueUserWorkItem,其中as Dispatcher引发OperationPosted事件,因此可能要由附加到该事件的任何组件将消息传递到正确的线程。