以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [已解决]请教Invoke执行委托  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=63352)

--  作者:不倒的翁
--  发布时间:2015/1/19 14:08:00
--  [已解决]请教Invoke执行委托
 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编辑过]

--  作者:有点甜
--  发布时间:2015/1/19 14:14:00
--  

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

 

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


--  作者:不倒的翁
--  发布时间:2015/1/19 14:14:00
--  
因多线程处理FT控件数据,线程中对控件进行操作会报 "BindingSource 不能是自己的数据源。请不要将 DataSource 和 DataMember 属性设置为循环引用 BindingSource 的值"错误,所以需要进行委托操作。
测试时,将数组拆分后进行传参时不报错,但没有数组来的灵活。
--  作者:有点甜
--  发布时间: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}) \'执行委托

--  作者:不倒的翁
--  发布时间: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
--  发布时间:2015/10/11 14:27:00
--  
委托给主窗口,程序还是会假死吧
--  作者:大红袍
--  发布时间:2015/10/11 15:20:00
--  

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


--  作者:大红袍
--  发布时间:2015/10/11 15:20:00
--  

要不你就用异步加载

 

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


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

--  作者:大红袍
--  发布时间: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