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


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

主题:[已解决]请教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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/1/19 14:14:00 [只看该作者]

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

 

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


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


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

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/1/19 14:25:00 [只看该作者]

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

 回到顶部
帅哥哟,离线,有人找我吗?
不倒的翁
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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进行操作。
甜版你的方法我试试看会报错不。。。
再次感谢。

 回到顶部
帅哥哟,离线,有人找我吗?
ycli368
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:992 积分:10387 威望:0 精华:0 注册:2012/12/11 14:25:00
  发帖心情 Post By:2015/10/11 14:27:00 [只看该作者]

委托给主窗口,程序还是会假死吧

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/10/11 15:20:00 [只看该作者]

请坐出错的例子上来。假死正常啊。load的时候,就是会假死的啊


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/10/11 15:20:00 [只看该作者]

要不你就用异步加载

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=49436&skin=0


 回到顶部
帅哥哟,离线,有人找我吗?
ycli368
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:992 积分:10387 威望:0 精华:0 注册:2012/12/11 14:25:00
  发帖心情 Post By:2015/10/11 15:38:00 [只看该作者]

保存可以异步不?窗口对加载及时性有依赖
[此贴子已经被作者于2015/10/11 15:39:11编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/10/11 15:47:00 [只看该作者]

以下是引用ycli368在2015/10/11 15:38:00的发言:
保存可以异步不?窗口对加载及时性有依赖
[此贴子已经被作者于2015/10/11 15:39:11编辑过]

 

一行一行保存。比如

 

CurrentTable.AddNew(100)
For Each r As Row In CurrentTable.rows
    If r.DataRow.RowState <> DataRowState.Unchanged Then
        r.save
        Application.Doevents
    End If
Next


 回到顶部
总数 11 1 2 下一页