COM-объект - Threading - .net

Есть ли способ выполнить метод объекта 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, мой основной поток блокируется до его завершения.

Я благодарен за любую помощь.

5
задан Anthony Greco 21 March 2011 в 21:19
поделиться