【问题标题】:How do I get a bool from a different thread?如何从不同的线程获取布尔值?
【发布时间】:2013-07-28 09:48:25
【问题描述】:

要做跨线程操作,我使用如下:
this.Invoke(new MethodInvoker(() => myMethod());

但是,例如,我不能执行以下操作:

this.Invoke(new MethodInvoker(() => bool myBool = getBool()); 
return myBool;

我该怎么做?我不能只做 bool myBool = getBool();
因为我得到一个跨线程操作错误。

提前致谢。

【问题讨论】:

  • 考虑使用基于任务的异步,而不是管理自己的线程。使用基于任务的异步,您只需 await 任务的价值;然后Task<bool> 将返回布尔值并在适合上下文的线程上恢复执行。

标签: c# multithreading winforms invoke


【解决方案1】:

试试这个:

delegate T MyDelegate<out T>();
public bool MethodName()
{
    bool b = (bool)this.Invoke(new MyDelegate<bool>(() => getBool()));
    return b;
}

【讨论】:

  • 我可以只用方法名来称呼它吗?
  • @Adam:你到底是什么意思?现在您可以调用MethodName() 来获取布尔值,但您可以将MethodName 替换为您想要的名称。
【解决方案2】:

不知道你的意思

但你可以这样做

bool myBool = false;
this.Invoke(new MethodInvoker(() => myBool = getBool()));
return myBool;

如果有错请指出

【讨论】:

  • 其实问题是,我想在 if 语句中使用它:if (this.Invoke(new MethodInvoker(() =&gt; !myBool))) { ...但这不起作用
猜你喜欢
  • 1970-01-01
  • 2015-11-12
  • 2017-09-23
  • 2016-07-08
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-15
  • 2014-02-12
相关资源
最近更新 更多