我有一個與第三方COM對象交互的應用程序。我調用的COM對象的方法有時會停止響應。我創建了一個Backgroundworker線程來調用該函數,我試圖從我的主線程監視它,以便在它掛起時將其殺死。我有額外的代碼(未提供)跟蹤來自主線程的system.timer的處理時間,如果事件超過我的閾值(這部分沒有問題),我會引發一個事件。這是當我想殺死線程並停止代碼執行。問題是..如果我使用cancelasync方法,它只會掛起,因爲代碼執行停留在函數調用中。如果線程掛起,就殺死VB.net中的BackgroundWorker - 使用COM對象
掛起代碼片段中的特定函數調用是「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
你不能殺死一個掛起的線程,Thread.Abort也不能工作。在單獨的進程中運行此代碼,以便可以終止進程。 –