Me.BeginInvoke(委托,参数)但是我想获得该异步操作结束后的事件,如何处理
New AsyncCallback(AddressOf Me.AfterDownLoad),这个东西在委托的异步操作中没有问题
在Control.BeginInvoke的异步操作如何传递进取呢??转来转去让我糊涂了
New AsyncCallback(AddressOf Me.AfterDownLoad),这个东西在委托的异步操作中没有问题
在Control.BeginInvoke的异步操作如何传递进取呢??转来转去让我糊涂了
解决方案 »
- 请问怎么用stored procedure生成主键primary key?
- 这个if语句的条件怎么写?
- Arcgis Engine 如何根据点解析地址信息出来啊???
- 为什么我两台电脑互传文件一般只能达到7K??急!
- 在B/S下,怎么将一个要写的Access文件路径用程序控制到客户端的某个文件夹里?急呀,在线等.......
- 怎么使用odbc驱动和C#语言创建dbf文件,并实现对它的读写操作
- 我在下载频道下载并评价资源后,为什么没有返还积分?
- C#实现网站数据抓取
- 最近使用文档问题
- C#调用matlab画图 无法显示图像
- winform 新建一个线程打开窗口
- 我中病毒了(网页被加上恶意脚本语句),我想写个程序改回来
--------------------
調用EndInvoke 'ParamObj是你要傳遞到AfterDownLoad的參數,如果不想傳遞,可用Nothing代替
Dim paramObj As Object = New Object()
'Control.BeginInvoke異步調用,會在Control的線程(通常即主線程)上執行Me.AfterDownLoad方法
Dim ar as IAsyncResult= Control.BeginInvoke(New AsyncCallback(AddressOf Me.AfterDownLoad), paramObj)
'調用EndInvoke之後,在該委托完成之前,當前線程會一直阻塞
Control.EndInvoke(ar) Private Sub AfterDownLoad(ByVal ar As IAsyncResult)
'你的代碼
End Sub
1、保证线程的流畅,用了EndInvoke,还怎么执行以下的代码??和同步运算没区别了
2、你的代码里面,传递了AsyncCallback?这里应该执行的是事件Sub,呵呵~~不应该是回调Sub谢谢你,不过还是不行的
-------------------
不好意思,的確是弄錯了,手寫的。
1、保证线程的流畅,用了EndInvoke,还怎么执行以下的代码??和同步运算没区别了
------------------
何謂線程的流暢?你衹是想在委托執行完成後執行一段代碼?那么直接將要執行的代碼放到目標方法中的後面即可。
Control.BeginInvoke,是通過發送消息給創建Control的線程(通常為窗體線程),窗體消息處理時會執行該目標方法。
2、然后主线程去做事件B
3、事件A完成后执行C
现在A的引发肯定没有问题,B也没有问题,但是如何激发C呢——前提是不影响B的持续执行
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim t As Thread = New Thread(AddressOf Task)
t.Start()
B()
End Sub Delegate Sub BCallBack() Private Sub Task()
Dim ar As IAsyncResult = Me.BeginInvoke(New BCallBack(AddressOf A))
Me.EndInvoke(ar)
'不知道你的C是否要訪問控件,這裡假設不訪問
C()
End Sub Private Sub A()
MsgBox("A開始")
Thread.Sleep(2000)
MsgBox("A完成")
End Sub Private Sub B()
MsgBox("B開始")
Thread.Sleep(2000)
MsgBox("B完成")
End Sub Private Sub C()
MsgBox("C執行")
End SubEnd Class
執行時,C和B是同時執行的,互不干擾,因為他們在不同的線程。
如果C也要在主線程,那么也不會干擾,因為主線程同時衹會做一件事
A先執行,等到A完成後B和C同時執行
執行順序為
B-->A-->C,一個完成再執行下一個