InvokeRequired 属性的值何时会发生改变?

3
当我想在Windows表单工作时使用委托类进行调用时,我总是需要使用InvokeRequired。这没问题。但是,当它正在工作时,谁改变了InvokeReuqired属性呢?
请查看此图片: alt text

如果您不在事件线程上,则 InvokeRequired 将为 true,因为它需要进入正确的线程才能进行更改。 - James Black
3个回答

6

InvokeRequired是在从创建它的线程不同的线程访问控件时为true,否则为false
更直接地回答你的问题,InvokeRequired属性并不是在特定时间点"改变";更准确地说,它可能会基于你所访问的线程返回不同的值。


4

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


1
+1 对于使用 delegate.BeginInvoke 的发现很好,也许他本意是调用 this.BeginInvoke? - csharptest.net

1
你说的“更改InvokeRequired属性”是什么意思?你是指true/false值正在改变吗?如果它返回true,并且您调用BeginInvoke委托,然后在委托中,该值最好已经更改了。整个重点是要“切换”到控件所创建的线程。当在除创建控件的线程之外的任何线程上执行具有InvokeRequired的代码行时,InvokeRequired将返回true。只有在创建控件的同一线程上执行时,它才会返回false。该属性本可以被命名为“NotOnThreadIWasCreatedIn”,因为这确实是它正在做的事情。它被命名为“InvokeRequired”,以传达它需要用于什么...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接