我想让我的getter线程安全。当我这样做时,我收到一个错误:
public ApplicationViewModel SelectedApplication
{
get
{
if (InvokeRequired)
{
BeginInvoke((Action<ApplicationViewModel>)SelectedApplication);
}
return _applicationsCombobox.SelectedItem as ApplicationViewModel;
}
}
我有错误:
Cannot cast expression of type 'Foo.Model.ApplicationViewModel' to type 'Action<ApplicationViewModel>'
答案 0 :(得分:6)
很多错误:
Invoke
是必需的Func<>
else
是必需的。产生:
public ApplicationViewModel SelectedApplication
{
get
{
if (this.InvokeRequired)
return (ApplicationViewModel)this.Invoke(new Func<ApplicationViewModel>(() => this.SelectedApplication));
else
return _applicationsCombobox.SelectedItem as ApplicationViewModel;
}
}
隐藏线程上下文切换到低级属性通常是一个错误。调用有很多开销,结果代码可能会很慢,但没有很好的暗示它为什么这么慢。
答案 1 :(得分:3)
BeginInvoke
需要代表。
你可以写
return (ApplicationViewModel)Invoke(new Func<object>(() => applicationsCombobox.SelectedItem));
答案 2 :(得分:2)
尝试:
public ApplicationViewModel SelectedApplication
{
get
{
if (InvokeRequired)
{
BeginInvoke(() => { return SelectedApplication(); });
}
return _applicationsCombobox.SelectedItem as ApplicationViewModel;
}
}