我在WPF应用程序中的一个单独的线程中执行一项长时间操作(连接测试、验证远程DB表等)。在测试过程中,我会为用户收集关于哪些测试已经通过和哪些没有通过的信息。 这些信息被存储为由我自己设计的对象的 List<T>
列表:
public class StatusItem : DependencyObject
{
public string Text { get... set... }
public Status Status { get... set... }
public string Details { get... set... }
}
所有这些属性都是对应其相应的
DependencyProperty
的前端。当操作完成(在单独的线程中)时,我将收集到的信息status
设置为我的Window
上的私有字段。我得到一个:InvalidOperationException:
The calling thread cannot access this object because a different thread owns it.
有没有一种方法可以将 status
(一个 List<StatusItem>
)从 TestThread 转移到我的主线程,而不必使用委托和 Dispatcher
调用?
PS:我可以使用 Invoke
,但我宁愿避免创建 CopyStatusItemsDelegate
委托。
INotifyPropertyChanged
发出的属性更改通知并不是线程不可知的。即使它们是从另一个线程引发的,它们也会委托给UI线程。 - WPF-itDependencyObject
。我已经改用INPC
接口实现了。谢谢大家! - Minustar