red*_*man 4 .net events multithreading
我知道事件处理程序在调用该事件的任何线程上执行.我进一步理解只需要从创建控件的线程更新表单控件.我假设UI线程是为此问题创建表单的线程.
如果事件是发布消息的结果,例如绘制消息,那么处理程序是否与原始线程分离?如果这是真的,那么任何线程都可以调用失效操作,并且结果绘制将始终出现在UI线程上,因为它是处理表单消息的那个.
这是它在凌晨2点左右在我脑海中映射出来的方式,在我旁边有一个长长的空小吃碗.请澄清并纠正,以便我能够正确理解工作中的机制.
MSDN:
调用Invalidate方法不会强制执行同步绘制; 要强制执行同步绘制,请在调用Invalidate方法后调用Update方法.
因此,可以从任何线程调用Invalidate,并仅从UI线程调用.在任何情况下,要100%确定不使用无效的跨线程调用,请在程序开头将Control :: CheckForIllegalCrossThreadCalls属性设置为true.这会导致任何无效调用立即失败,您无需猜测.