SOS!关于异步调用的问题!急!

aricysds 2004-12-22 07:10:47
在vb.net里面,我用异步方法更新datagrid的数据
datagrid的container 是一个usercontrol,
TDataManager.GetInstance.Subscribe("GroupManager", UserID, params, New TDataEvent(AddressOf HandleGroupData), New TControlEvent(AddressOf ControlData), Nothing, TSyncMode.smAsync)
如果有数据异步调用HandleGroupData函数来更新。
Private Sub HandleGroupData(ByVal dsh As TDataSubscriptionHandle, ByVal aRow As Object())

Dim params As Object = New Object() {aRow}
'FGroupRefresh point to RefreshGroupDG function
me.Invoke(FGroupRefresh, params)
End Sub

Private Sub RefrehGroupDG(ByVal aRow As Object())
'do something
End Sub
为什么我有时拿不到cpu来处理这个事件?应该怎样做。
...全文
116 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
aricysds 2004-12-24
  • 打赏
  • 举报
回复
其实我在TDataManager.GetInstance.Subscribe("GroupManager", UserID, params, New TDataEvent(AddressOf HandleGroupData), New TControlEvent(AddressOf ControlData), Nothing, TSyncMode.smAsync) 里面已经是异步调用HandleGroupData这个函数了。
北京的雾霾天 2004-12-23
  • 打赏
  • 举报
回复
你用me.Invoke来调用的方法还不算是异步调用.这样只是不同的线程之间的方法的调用.
对于这个用法你可能不会及时的响应用户界面的操作而好像是死机的了.

你可以用delegate,使用代理的异步操作,比如deleagte实例的BeginInvoke来开始调用异步的方法,用
EndInvoke来结束调用.
rustical 2004-12-23
  • 打赏
  • 举报
回复
拿不到cpu来处理这个事件?
rustical 2004-12-23
  • 打赏
  • 举报
回复
拿不到cpu来处理这个事件?
liulxmooo 2004-12-23
  • 打赏
  • 举报
回复
up
jxzhang615 2004-12-23
  • 打赏
  • 举报
回复
帮顶!
xavier 2004-12-23
  • 打赏
  • 举报
回复
private delegate sub(or function) dele_1
private dele_2 as dele_1
private iasyync_test as IAsyncResult
在form_load里面
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dele_2 = New dele_1(AddressOf test1) 'test1 是你想要异步调用的方法
iasync_test=dele_2.begininvoke(nothing,nothing) '开始异步调用
End Sub

如果想知道异步调用是否完成,加个button。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If iasync.IsCompleted = True Then '已经完成调用
dele_2.endinvoke(iasync)
Else '未完成
MessageBox.Show("not finished!")
End If
End Sub
另外你也可以自己写个回掉函数,在异步调用完成的时候进行别的操作。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dele_2 = New dele_1(AddressOf test1) 'test1 是你想要异步调用的方法
dim ab as asynccallback
ab=new asynccallback(address of back_test) 'back_test是要进行回掉的函数
iasync_test=dele_2.begininvoke(ab,nothing) '开始异步调用
End Sub

private sub back_test()
'想进行的操作。
dele_2.endinvoke(iasync_test)
end sub
APP开发王 2004-12-23
  • 打赏
  • 举报
回复
up

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧