概念
control.invoke(参数delegate)方法:在拥有此控件的基础窗口句柄的线程上执行指定的委托。
control.begininvoke(参数delegate)方法:在创建控件的基础句柄所在线程上异步执行指定委托。
在UI线程上执行完后,开始Invoke,Invoke是同步
期间必须等待主线程的任务执行完成,才会去执行invoke提交的任务执行玩会才执行Invoke后的方法
通过begininvoke来将invokemethod方法提交给主线程,然后主线程执行invokemethod(主线程自己的任务执行完成), 同时子线程继续执行后续的代码
Invoke其余的用法
1、先看以下截图
Delegate的Invoke、BeginInvoke
1、Delegate.Invoke (委托同步调用)
a、委托的Invoke方法,在当前线程中执行委托。
b、委托执行时阻塞当前线程,知道委托执行完毕,当前线程才继续向下执行。
c、委托的Invoke方法,类似方法的常规调用。
2、Delegate.BeginInvoke (委托异步调用)
a、委托的BeginInvoke方法,在线程池分配的子线程中执行委托
b、委托执行时不会阻塞主线程(调用委托的BeginInvoke线程),主线程继续向下执行。
c、委托执行时会阻塞子线程。
d、委托结束时,如果有返回值,子线程讲返回值传递给主线程;如果有回调函数,子线程将继续执行回调函数。
MethodBase.Invoke
命名空间:
System.Reflection
重载方法有:
Invoke(Object, Object[]) 使用指定参数调用由当前实例表示的方法或构造函数
Invoke(Object, BindingFlags, Binder, Object[], CultureInfo)