我有一个与第三方 COM 对象交互的应用程序。我调用的 COM 对象的方法有时会停止响应。我创建了一个 Backgroundworker 线程来调用该函数,并且我试图从我的主线程监视它以在它挂起时将其杀死。我有额外的代码(未提供)使用主线程中的 system.timer 跟踪处理时间,如果它超过我的阈值,我会引发一个事件(这部分很好)。这是我想杀死线程并停止代码执行的时候。问题是.. 如果我使用 cancelasync 方法,它只会挂起,因为代码执行卡在函数调用上。
挂起的代码片段中的特定函数调用是“objCOM.SendDataToServer()”。返回通常需要 1-3 秒,但如果它没有得到响应,它将无限期挂起并且根本不会返回(没有错误只是挂起).. 没有超时......因为我没有访问源函数我无法提供。我尝试了线程的 .dispose() 方法,但显然这并没有杀死它,cancelasync 也没有。我只需要帮助弄清楚如何杀死这个线程,这样我就可以重置服务器连接并再次调用该函数。任何帮助深表感谢!
Public Class COMobject
Private objCOM as new acs.manager
Public Sub CallComFunction()
Dim bw_com as New Backgroundworker
AddHandler bw_com.DoWork, AddressOf bw_com_dowork
AddHandler bw_com.RunWorkerCompleted, AddressOf bw_com_runworkercompleted
AddHandler bw_com.ProgressChanged, AddressOf bw_com_progresschanged
bw_com.WorkerReportsProgress = True
bw_com.RunWorkerAsync()
End Sub
Private Sub bw_com_dowork(byval sender as object,byval e as doworkeventargs)
'this is the long running function that will hang
call objCOM.SendDataToServer()
End sub
End Class