Dobrá, zkusím problém blíže přiblížit.Promiňte mi-snad jen drobné -terminologické nepřesnosti.Mám kód, vygenerovaný pro windows service. Nebudu zde deklarovat všechny proměnné, jen snad, že MyClass je instance třídy,kde mám definované další funkce, které používám.V metodě OnStart windows služby mám kód:
IPport = xxx 'port na kterém se poslouchá
MyClass.UDP = New System.Net.Sockets.UdpClient(IPport)
threadReceive = New System.Threading.Thread(AddressOf MyClass.ReceiveMessage)
threadReceive.SetApartmentState(ApartmentState.STA)
threadReceive.Start()
Pokud tomu správně rozumím, z tohota hlavního vlákna, ve kterém běží samotná windows service(v režimu MTA) se odštěpí vlákno, které poslouchá na určitém portu UDP komunikaci. S tím problém zatím není. Vlákno pěkně poslouchá... V instanci třídy MyClass, mám kód:
Public Sub ReceiveMessage()
SyncLock GetType(WorkClass) 'WorkClass je název třídy
Do While ContinueListen = True
Try
Dim REP As New System.Net.IPEndPoint(System.Net.IPAddress.Any, 0)
Dim receiveBytes As [Byte]() = UDP.Receive(REP)
BitDet As BitArray
BitDet = New BitArray(receiveBytes)
strReturnData=System.Text.Encoding.ASCII.GetString(receiveBytes)
UDPrecieved(strReturnData)
Catch ex As Exception
'zápis chyby do souboru
End Try
Loop
End SyncLock
End Sub
Public Sub UDPrecieved(ByVal strReturnData As System.String)
'zde je kód, kde mám definovanou novou instanci COM objektu aplikace třetí strany, který musím využívat a který neumí MTA režim. Této instanci COMu posílám data získaná přes UDP
End Sub
Tak jak tomu rozumím, nejlepší by bylo, aby se ke COM objektu přistupovalo jednotlivě, tj.vždy až vlákno skončí.Jak toho docílit?Nebo se na danou problematiku dívám zcela špatně?A mám nadeklarovat novou instanci COM objektu v hlavním vlákně?Do jaké metody (onStart atd.) ho ale potom dát a jak k němu přistupovat, aby se mu předávaly data z vedlejších vláken, která poslouchají UDP komunikaci?
Snad jsem problém vysvětlil lépe než v předchozím dotazu.Doufám, že reakce bude přínosem nejen pro mě,ale i pro ostatní, kteří mají pocit,že této problematice hlavního a vedlejších vláken nerozumí tak přesně jak by si představovali. Děkuji za věnovaný čas
|