Foxtable(狐表)用户栏目专家坐堂 → [已解决]请教Invoke执行委托


  共有3792人关注过本帖树形打印复制链接

主题:[已解决]请教Invoke执行委托

帅哥哟,离线,有人找我吗?
不倒的翁
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
[已解决]请教Invoke执行委托  发帖心情 Post By:2015/1/19 14:08:00 [显示全部帖子]

 Delegate Sub TestDG(ByVal Val() As object) '声明委托
Public Sub _TestDG(ByVal Val() As object) '委托方法
msgbox(Val(0) & "-" & Val(1))
End Sub

Dim ValArr() As object = {1,2}
Dim TDG As New TestDG(Addressof _TestDG) '实例化委托
BaseMainForm.Invoke(TDG ,ValArr) '执行委托

代码如上
传参都为Object类型数组,但执行Invoke时,报“参数计数不匹配”错误。
请教各位老师,谢谢。
[此贴子已经被作者于2015-1-19 14:46:28编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
不倒的翁
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
  发帖心情 Post By:2015/1/19 14:14:00 [显示全部帖子]

因多线程处理FT控件数据,线程中对控件进行操作会报 "BindingSource 不能是自己的数据源。请不要将 DataSource 和 DataMember 属性设置为循环引用 BindingSource 的值"错误,所以需要进行委托操作。
测试时,将数组拆分后进行传参时不报错,但没有数组来的灵活。

 回到顶部
帅哥哟,离线,有人找我吗?
不倒的翁
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
  发帖心情 Post By:2015/1/19 14:36:00 [显示全部帖子]

以下是引用有点甜在2015-1-19 14:14:00的发言:

 你的委托跟basemainform有什么关系?直接用啊

 

Dim ValArr() As object = {1,2}
Dim TDG As New TestDG(Addressof _TestDG) '实例化委托
tdg.Invoke(ValArr) '执行委托

感谢甜版。问题解决了。
关于BaseMainFrom使用Invoke方法:
如果是在线程中实例化委托直接用委托
Invoke调用方法的话和不用委托不是一样么?
网上资料查了下,委托是为了在线程中对UI进行操作时才使用,避免引起
"BindingSource 不能是自己的数据源。请不要将 DataSource 和 DataMember 属性设置为循环引用 BindingSource 的值"的错。
我就理解为BaseMainFrom还是主进程,线程中用BaseMainFrom的 Invoke还是在主进程中对UI进行操作。
甜版你的方法我试试看会报错不。。。
再次感谢。

 回到顶部