C# 总结silverlight多线程访问规则
有没有人能给我一套简明的(通用的)规则,说明哪些数据/方法可以从辅助(非UI)线程访问,哪些数据/方法不能从辅助(非UI)线程访问?我想说,这是UIThread创建的任何DependencyObject 我建议使用这种扩展方法,当你不确定C# 总结silverlight多线程访问规则,c#,multithreading,silverlight,C#,Multithreading,Silverlight,有没有人能给我一套简明的(通用的)规则,说明哪些数据/方法可以从辅助(非UI)线程访问,哪些数据/方法不能从辅助(非UI)线程访问?我想说,这是UIThread创建的任何DependencyObject 我建议使用这种扩展方法,当你不确定 public static class Extensions { public static void FastInvoke(this Dispatcher dispatcher, Action action) { if (di
public static class Extensions
{
public static void FastInvoke(this Dispatcher dispatcher, Action action)
{
if (dispatcher.CheckAccess())
action.Invoke();
else
dispatcher.BeginInvoke(action);
}
}
像这样使用它:
Dispatcher.FastInvoke(delegate
{
StatusMessageText.Text = "OK";
});
我想说的是,它是由UIThread创建的任何DependencyObject 我建议使用这种扩展方法,当你不确定
public static class Extensions
{
public static void FastInvoke(this Dispatcher dispatcher, Action action)
{
if (dispatcher.CheckAccess())
action.Invoke();
else
dispatcher.BeginInvoke(action);
}
}
像这样使用它:
Dispatcher.FastInvoke(delegate
{
StatusMessageText.Text = "OK";
});
谢谢-这是一个好的开始。我还可以看出,如果UI元素绑定到INotifyPropertyChanged派生对象的属性,那么在后台线程中修改该属性的值也将失败。因此,如果被非UI线程访问,任何绑定到UI元素的UI元素或属性都会导致错误。还有其他规定吗?谢谢-这是个好的开始。我还可以看出,如果UI元素绑定到INotifyPropertyChanged派生对象的属性,那么在后台线程中修改该属性的值也将失败。因此,如果被非UI线程访问,任何绑定到UI元素的UI元素或属性都会导致错误。还有其他规定吗?