Om du vill göra det med enbart .NET-api så är nog enda lösning att försöka öppna porten, får man ett InvalidOperationException så är den öppen. Inte särskilt snyggt, och finns lite nackdelar. Beror lite på vilka förutsättningar du har och vad du vill åstakomma, beskriv lite bättre vad det är du försöker göra. Kanske dum fråga men: VARFÖR (vad blir det för fel eller vad hindrar) kan du inte göra det? I en multitrådat applikation man bör undvika ha flera trådar som accessar sammtidigt samma resurs. Det är best practice.Öppen com-port...?
Jag öppnar en com-port i en tråd men vill se om comporten är öppen i en annan tråd. Hur göra man?Sv: Öppen com-port...?
En fundering är om du skulle kunna skaffa ett lås på serialport-objektet som andra tråden äger, och sedan kolla egenskapen IsOpen på den. Det känns som den bästa lösningen. Men du kommer inte ifrån att du måste polla.
Om det inte är ett alternativ så borde man kunna använda winapi för att kräva ett lås på filen (COMx), men istället för att returnera ett fel direkt om det inte går så ligger man där och väntar på att få låset. När man får låset så är porten ledig. LockEx är nog trevlig då, i parametern lpOverlapped finns ett fält vid namn hEvent, där kan du slänga in en handle till ett event. Det eventet kan du sedan vänta på, när det väntat färdigt så har du låset. Du vill nog ha en exclusive lock.Sv: Öppen com-port...?
Sv:Öppen com-port...?
startar jag en tråd med en öppen com1 så kan jag inte köra "IsOpen" från en annan tråd och se om "com1" är öppen (IsOpen=True).
Men får nog fixa någon egenlösning som håller koll på vilka portar jag öppnar och stänger.Sv: Öppen com-port...?
Sv:Öppen com-port...?
Det finns två sätt att göra det. Den ena är med hjälp av lock på själva SerialPort objektet, den andra är med hjälp av Synchronization contexts: System.Runtime.Remoting.Contexts.SynchronizationAttribute
Mvh,