我创建了一个我打算调用 Async 的委托。
模块级别
Delegate Sub GetPartListDataFromServer(ByVal dvOriginal As DataView, ByVal ProgramID As Integer)
Dim dlgGetPartList As GetPartListDataFromServer
我在方法中使用的以下代码
Dim dlgGetPartList As New GetPartListDataFromServer(AddressOf AsyncThreadMethod_GetPartListDataFromServer)
dlgGetPartList.BeginInvoke(ucboPart.DataSource, ucboProgram.Value, AddressOf AsyncCallback_GetPartListDataFromServer, Nothing)
该方法运行并执行所需的操作
Asyn 回调在我执行 EndInvoke 的完成后触发
Sub AsyncCallback_GetPartListDataFromServer(ByVal ar As IAsyncResult)
dlgGetPartList.EndInvoke(Nothing)
End Sub
只要在委托上启动 BeginInvoke 的方法仅在没有 BeginInvoke/Thread 操作正在运行时运行,它就可以工作。问题是可以调用一个新线程,而委托上的另一个线程仍在运行并且还没有被 EndInvoke'd。
如有必要,程序需要能够让委托一次在多个实例中运行,并且它们都需要完成并调用 EndInvoke。一旦我开始另一个 BeginInvoke,我就会失去对第一个 BeginInvoke 的引用,因此我无法使用 EndInvoke 清理新线程。
克服此问题的干净解决方案和最佳实践是什么?