サード パーティの COM オブジェクトと対話するアプリケーションがあります。呼び出した COM オブジェクトのメソッドが応答しなくなることがあります。関数を呼び出すための Backgroundworker スレッドを作成しました。メイン スレッドから監視して、ハングした場合に強制終了しようとしています。メインスレッドから system.timer を使用して処理時間を追跡する追加のコード (提供されていません) があり、しきい値を超えた場合にイベントを発生させます (この部分は問題ありません)。これは、スレッドを強制終了してコードの実行を停止したい場合です。問題は.. cancelasync メソッドを使用すると、コードの実行が関数呼び出しで停止するため保留になります。
ハングするコード スニペット内の特定の関数呼び出しは、「objCOM.SendDataToServer()」です。通常、戻るには1〜3秒かかりますが、応答がない場合は無期限にハングし、まったく返されません(エラーは発生せず、ハングするだけです)..タイムアウトはありません...そして私が持っていないのでソース機能へのアクセスは提供できません。スレッドの .dispose() メソッドを試してみましたが、どうやらそれはそれを殺さず、cancelasync も行いません。サーバー接続をリセットして関数を再度呼び出すことができるように、このスレッドをKILLする方法を理解するのに助けが必要です。どんな助けでも大歓迎です!
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