Page 1 of 1

[vb.net] Starta/Stänga av enheter samtidigt?

Posted: Fri Mar 17, 2023 9:45 am
by NSS
Utvecklar ett eget program i vb.net för att styra mina enheter.

Enda problemet är att det verkar inte gå att starta/stänga av flera samtidigt, eller direkt efter varrandra?

Exempelvis om man skriver:

devTurnOn(1)
devTurnOn(2)


så händer ingenting med någon utav dem.


skriver jag istället:

devTurnOn(1)
Application.DoEvents
devTurnOn(2)


så fungerar det heller inte.

Enda sättet som verkar fungera är att vänta tills funktionen är klar genom att uppskatta hur lång tid den tar på sig, och bygga en timerfunktion.

Public Sub TurnOn()
dim Return as Boolean = False
Return = devTurnOn(2)
Wait(50)
Return = devTurnOn(3)
Wait(50)
Return = devTurnOn(4)
End Sub

Public Function Wait(ByVal Time As Integer) As String
For i As Integer = 1 To Time * 1000
Application.DoEvents()
Next
Wait = ""
End Function


Någon som har något annat förslag?

Posted: Fri Mar 17, 2023 9:45 am
by micke.prag
devTurnOn (och de andra funktionerna) är non-blocking vilket betyder att de returnerar innan TellSticken har sänt klart. Detta för att förhindra att programmet i datorn "fryser" när den ska kommunicera med TellStick. En paus på 500 ms räcker gott mellan anropen!

Posted: Fri Mar 17, 2023 9:45 am
by NSS
Okey, tack så mycket för informationen, då bygger jag vidare via delays.

Posted: Fri Mar 17, 2023 9:45 am
by olf
Använd med fördel Thread.Sleep(500) för 500ms så får du något som sover lite mer som du tänkt.

Om du inte vill att applikationen skall stanna medans du kör din sleep (tänker på att du kör DoEvents) så flytta över koden till en BackgroundWorker så lämnas huvudtråden (formuläret etc.) fri. Dock får de ju vissa andra konsekvenser som crossthread-calls som du får lösa med Invoke.