Есть ли способ выполнить метод объекта com внутри совершенно нового потока, не привязанного к основному потоку? Я пробовал использовать backgrounWorker и даже использовать новый поток, выполнив Dim thr as new Thread (AddressOf blah)
, и ни один из них не работает. Я нигде не ссылаюсь на COM-объект, кроме как внутри поточной функции «blah» или метода DoWork backgroundWorker, но все же мой основной пользовательский интерфейс блокируется, когда он пытается обработать методы COM-объекта, которые я вызываю.
Мне действительно нужно заставить это выполнять методы из объекта com в отдельном потоке, потому что это приводит к блокировке всего моего приложения.
Ниже приведен пример моего потока, в котором используется метод «DoWork». Та же самая логика может быть использована для фонового рабочего
Public Sub Reconnect_Scanner() Implements Scanners.Reconnect_Scanner
'Do our request on a new thread
Dim thread As New System.Threading.Thread(AddressOf Connect)
thread.SetApartmentState(Threading.ApartmentState.STA)
thread.Start()
End Sub
Public Sub Connect()
'Get a new instance of our scanner
Dim scanner As New OposScanner_CCO.OPOSScanner
'Loop until scanner is opened
Do
Debug.Print("looking for scanner")
'If we find the device, exit do
Dim openId As Integer = scanner.Open("Honeywell")
If openId = 0 Then Exit Do
'Sleep 1 second
System.Threading.Thread.Sleep(250)
Loop
End Sub
Даже если он должен работать в совершенно новом потоке, как только он выполнит scanner.open, мой основной поток блокируется до его завершения.
Я благодарен за любую помощь.