none
probleme multithread et COM RRS feed

  • Question

  • bonjour à tous,

    J'ai une classe qui contient des methodes qui font des appels à une dll.

    Je lance un second thread et je fais un appel à une de mes methodes de la classe. A l'execution, ca bug au moment de l'appel d'une fonction de la dll (LTCONTROLLib).

    Lors de l'appel de méthodes de ma classe dans mon thread principale, no problem. Ici methode "connect()"

    Mais dans un autre thread (méthode "initialise()") voila le message:

     

    Unable to cast COM object of type 'System.__ComObject' to interface type 'LTCONTROLLib.ILTCommandSync'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{58DB561D-0186-11D5-BBB6-00508B35B332}' failed due to the following error: Cette interface n'est pas prise en charge (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

     

    Code:

     

    Imports LTCONTROLLib

    Imports System.Threading

     

    Public Class Form1

    Private _th1 As Thread

    Private _synchroThread1 As New ManualResetEvent(False)

     

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    G_trak.connect()

    _th1 = New Thread(AddressOf exeCommandeTh1)

    _th1.Start()

    _th1.Join()

    End Sub

     

    Private Sub exeCommandeTh1()

    G_trak.initialise()

    End Sub

    End Class

     

    ************************************************************************************************************

    *********************************************************************************

    public Class traker

     

    Private _LTConnect1 As New LTCONTROLLib.LTConnect()

    Private WithEvents _ObjSync1 As LTCONTROLLib.LTCommandSync

     

    '***************************

    ' Connection

    Private Function connect() As Boolean

     

    On Error GoTo ErrorHandler

     

    'server

    _LTConnect1.ConnectEmbeddedSystem(G_address1, 700)

     

    Return _LTConnect1.IsConnected

     

    ErrorHandler:

    MsgBox(Err.Description)

    Return False

    End Function

     

    '**************************************************************

    'Initialisation

    Private Function initialise() As Double

     

    'erreur à l'appel de cette fonction

    _ObjSync1.SetUnits(LTCONTROLLib.ES_LengthUnit.ES_LU_Millimeter, LTCONTROLLib.ES_AngleUnit.ES_AU_Radian, LTCONTROLLib.ES_TemperatureUnit.ES_TU_Celsius, LTCONTROLLib.ES_PressureUnit.ES_PU_Mbar, LTCONTROLLib.ES_HumidityUnit.ES_HU_RH)

    Return _temp

    End Function

     

    End Class

     

    Merci d'avance

    Erwann

    vendredi 30 mars 2007 09:05