是否可以通过反射来修改DispatcherObject对象中的_dispatcher字段,以跨线程修改DispatcherObject对象的属性?
我是wpf开发的新手。通过观察DispatcherObject的源代码,我了解到DispatcherObject对象只能由其关联的Dispatcher访问。如果是跨线程,是否可以通过修改_dispatcher字段来修改访问权限,以便当前线程可以正常运行? DispatcherObject,这个问题困扰了我很长时间。
public static List<string> GetPrimaryKeyColumns(DbConnection connection, string tableName)
{
List<string> result = new List<string>();
DbCommand command = connection.CreateCommand();
string[] restrictions = new string[] { null, null, tableName };
DataTable table = connection.GetSchema("IndexColumns", restrictions);
if (string.IsNullOrEmpty(tableName))
throw new Exception("Table name must be set.");
foreach (DataRow row in table.Rows)
{
result.Add(row["column_name"].ToString());
}
return result;
}
答案 0 :(得分:1)
在可视树中更改单个UI元素的Dispatcher
属性是没有意义的,因为树中的所有元素必须具有相同的线程亲和力。
如果需要从后台线程创建UI元素,则必须在UI线程的Dispatcher中调用创建代码,就像对UI元素的任何其他访问一样:
btn.Dispatcher.Invoke(() =>
{
btn.Content = new TextBlock { Text = "Click Me!" };
});