背景
在多线程运行中,想要更改UI控件的属性。一直认为两种方式是一样的,以前也是混着写的,这次翻车了。
this.Invoke(委托实例,参数)
这个是在拥有控件的基础窗口句柄的线程上,用指定的自变量列表执行指定委托。
,也就是说通知UI线程处理事件,可跨线程。
委托实例.Invoke(参数)
这个是执行委托,运行在创建委托的线程中
,不能跨线程使用。
委托与直接调用类public函数区别
1.相当于用方法作为另一方法参数(类似于C的函数指针)(没体会过优势
)
2.在两个不能直接调用的方法中作为桥梁,如:在多线程中的跨线程的方法调用就得用委托(常用
)
3.当不知道方法具体实现什么时使用委托,如:事件中使用委托(常用
)
4.解耦(应该算结构优化吧
)
总结
委托中涉及到UI中控件属性更改,则使用this.Invoke,其他情况使用delegate.Invoke