当我想在 Windows 窗体工作时使用委托类进行调用时,我总是必须使用 InvokeRequired。没关系。但是谁在 InvokeReuqired 属性工作时更改了它。请检查此图像:
3 回答
InvokeRequired
是true
当控件从创建它的线程以外的线程访问时,false
否则。
为了更直接地回答您的问题,并不是InvokeRequired
属性在特定时间点“变化”;更准确地说,它可能会根据您访问它的线程返回不同的值。
您正在调用Delegate.BeginInvoke
in button1_Click
,这意味着SayListeyeEkle
将在线程池线程中调用 - 这意味着它是完全正确的InvokeRequired
。如果您在 UI 线程中直接从, 调用,那将是不正确的。ListeyeEkle
button1_Click
您是什么意思“更改 InvokeRequired 属性”?你的意思是真/假值正在改变吗?如果它返回 true,并且您对 BeginInvoke 进行了委托调用,那么之后,在委托中,值更好地发生了变化。重点是“切换”到创建控件的线程。当在创建控件的线程以外的任何线程上执行带有 InvokeRequired 的代码行时,InvokeRequired 将返回 true。只有在创建控件的同一线程上执行时,它才会返回 false。该属性可能已命名
NotOnThreadIWasCreatedIn
,因为这就是它所做的一切。它的命名InvokeRequired
是为了协调它需要用于什么......