WinForms 开发中Control.Invoke是用于非UI线程中请求修改UI元素的方法, 一般配合Control.InvokeRequired使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
类似Control.Invoke的还有Control.BeginInvoke和Control.EndInvoke, 它们是异步调用.
这些方法和属性都依赖于IsHandleCreated为true
时, IsHandleCreated表示窗口句柄是否已创建, 它并不是指是否new Form1()
过, 而是指是否Show()
过, 包括Application.Run, Show, ShowDialog这些调用都会使IsHandleCreated为true
.
而在IsHandleCreated为false
时, 比如刚刚new Form1()
, Control.InvokeRequired返回false
, 调用Control.Invoke会抛出异常:
System.InvalidOperationException: 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。