我想让我的getter线程安全.当我这样做时,我收到一个错误:
public ApplicationViewModel SelectedApplication
{
get
{
if (InvokeRequired)
{
BeginInvoke((Action<ApplicationViewModel>)SelectedApplication);
}
return _applicationsCombobox.SelectedItem as ApplicationViewModel;
}
}
Run Code Online (Sandbox Code Playgroud)
我有错误:
Cannot cast expression of type 'Foo.Model.ApplicationViewModel' to type 'Action<ApplicationViewModel>'
Run Code Online (Sandbox Code Playgroud)
很多事情都错了:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
隐藏线程上下文切换到低级属性通常是一个错误.调用有很多开销,结果代码可能会变得很慢而没有很好的暗示它为什么这么慢.