我有一个属性,在访问时会抛出一条带有消息的异常:"调用线程无法访问此对象,因为另一个线程拥有它。"
我试图通过在getter中使用Dispatcher.Invoke()
来解决它,但由于“无法访问非静态方法'调用'”而无法进行编译。在静态环境中。
public override bool Enabled
{
get
{
return Dispatcher.Invoke(() => (ISomethingView) View).ViewModel.Enabled;
}
}
}
是否有更简单的方法可以在WPF中使我的属性保持线程安全?
答案 0 :(得分:1)
您使用的是Dispatcher
类型,它没有静态Invoke
方法。
您需要Instance
Dispatcher。
试试这个:
public override bool Enabled
{
get
{
return Application.Current.Dispatcher.Invoke(() => (ISomethingView) View).ViewModel.Enabled;
}
}
答案 1 :(得分:0)
我假设你的 View 对象是DispatcherObject,它不允许从另一个线程访问。如果是这样,那么执行以下操作:
public override bool Enabled
{
get
{
return View.Dispatcher.Invoke( () => ((ISomethingView)View).ViewModel.Enabled );
}
}
答案 2 :(得分:0)
您可以按如下方式使用Dispatcher.CurrentDispatcher:
public override bool Enabled
{
get
{
return System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke(() => { return ((ISomethingView)View).ViewModel.Enabled; });
}
}