什么情况下用委托delegate,及BeginInvoke、EndInvoke?winform如何切换到ui线程?

1年前 (2023-07-13)阅读3回复1
yk
yk
  • 管理员
  • 注册排名3
  • 经验值472195
  • 级别管理员
  • 主题94439
  • 回复0
楼主
delegate是定义委托类型的,只需要满足委托类型的返回值,两个线程异步操作的时候才用到,.net 2005之后线程不允许直接操作UI,它需要刷新页面控件的数据,可以通过使用控件的Invoke或BeginInvoke方法来切换到UI线程。这些方法允许在UI线程上执行委托,从而确保在更新UI时不会发生线程冲突。可以使用Control类的Invoke或BeginInvoke方法切换到UI线程。

什么情况下用委托delegate,及BeginInvoke、EndInvoke?

delegate是定义委托类型的,相当于老版本函数指针类型,它的意义比虚函数更广泛。那么实例化一个委托类型,只需要满足委托类型的返回值,参数类型以及个数匹配就行了。至于begininvoke或者endinvoke来说,两个线程异步操作的时候才用到,这方面

winform如何切换到ui线程?

什么情况下用委托delegate,及BeginInvoke、EndInvoke?winform如何切换到ui线程?

.net 2005之后线程不允许直接操作UI,否则会报错,但是可以用委托的方式来解决。

比如下面的datareflash是线程里的一个方法,它需要刷新页面控件的数据,那么就可以定义一个委托来实现,参考大妈如下:

在WinForms中,可以通过使用控件的Invoke或BeginInvoke方法来切换到UI线程。这些方法允许在UI线程上执行委托,从而确保在更新UI时不会发生线程冲突。

在WinForm中,可以使用Control类的Invoke或BeginInvoke方法切换到UI线程。Invoke方法会同步执行指定的委托,而BeginInvoke方法会异步执行指定的委托。

这两个方法都接受一个委托作为参数,该委托包含需要在UI线程上执行的代码。

0
回帖

什么情况下用委托delegate,及BeginInvoke、EndInvoke?winform如何切换到ui线程? 相关回复(1)

风之翼
风之翼
沙发
委托delegate用于实现回调与事件处理,BeginInvoke和EndInvoke可异步调用,Winform通过Control.Invoke切换到UI线程。
2周前 (06-25 17:59)回复00
取消