【问题标题】:When does the vaIue of the InvokeRequired property change?InvokeRequired 属性的值什么时候改变?
【发布时间】:2009-10-16 13:59:45
【问题描述】:

当我想在 windows 窗体工作时使用委托类进行调用时,我总是必须使用 InvokeRequired。没关系。但是谁在 InvokeReuqired 属性工作时更改了它。 请检查此图像:

【问题讨论】:

  • 如果您不在事件线程上,那么 InvokeRequired 将为真,因为它需要在正确的线程上才能进行更改。

标签: c# multithreading delegates invokerequired


【解决方案1】:

InvokeRequiredtrue,当控件是从创建它的线程以外的线程访问时,false 否则。
为了更直接地回答您的问题,并不是 InvokeRequired 属性在特定时间点“变化”;更准确地说,它可能会根据您访问它的线程返回不同的值。

【讨论】:

    【解决方案2】:

    您在button1_Click 中调用Delegate.BeginInvoke,这意味着SayListeyeEkle 将在线程池线程中被调用——这意味着InvokeRequired 是完全正确的。如果您在 UI 线程中直接从 button1_Click 调用 ListeyeEkle不会为真。

    【讨论】:

    • +1 很好地理解了delegate.BeginInvoke的使用,也许他打算调用this.BeginInvoke?
    【解决方案3】:

    “更改 InvokeRequired 属性”是什么意思?你的意思是真/假值正在改变吗?如果它返回 true,并且您对 BeginInvoke 进行了委托调用,那么之后,在委托中,值 Better have 发生了变化。重点是“切换”到创建控件的线程。当在创建控件的线程以外的任何线程上执行带有 InvokeRequired 的代码行时,InvokeRequired 将返回 true。只有在创建控件的同一线程上执行时,它才会返回 false。该属性可能已命名 NotOnThreadIWasCreatedIn,因为这就是它所做的一切。它被命名为InvokeRequired 来协调它需要用于什么......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-15
      • 2014-10-14
      • 2010-09-09
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多