C#使用属性getter调用InvokeRequired

Joh*_*ohn 2 c# invokerequired

我想让我的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)

Han*_*ant 6

很多事情都错了:

  • 你不能使用BeginInvoke,Invoke是必需的
  • 你不能使用Action <>,你返回一个值,所以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)

隐藏线程上下文切换到低级属性通常是一个错误.调用有很多开销,结果代码可能会变得很慢而没有很好的暗示它为什么这么慢.