gpt4 book ai didi

C# InvokeRequired 与属性 getter

转载 作者:行者123 更新时间:2023-11-30 19:12:28 26 4
gpt4 key购买 nike

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

最佳答案

很多地方都错了:

  • 您不能使用 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;
}
}

在低级属性中隐藏线程上下文切换通常是一个错误。调用有很多开销,生成的代码最终可能会非常慢,而没有很好地提示为什么它这么慢。

关于C# InvokeRequired 与属性 getter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6945574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com