Hallo, ich habe da ein programm in VB .NET geschrieben das mir helfen sollte packete zu meinem gerät zu schicken oder welche von ihm zu empfangen es läuft einigermaßen (das schicken zumindest! das empfangen ist sehr langsam bzw. geht gar nicht)! ich kann kontakt zu meinem gerät aufnehmen aber wenn ich packete empfangen möchte (methode getPacket()) dann dauert es so lange dass ich mein programm doch abbrechen muß ich habe ein breakpoint gesetzt um zu sehen wo es hängen bleibt und da habe ich gemerkt dass es bei der methode deviceiocontrol() in getPacket() hängt warum denn? ich verstehe das nicht! kann mir jemand helfen? mein gerät ist per USB angeschlossen hier mein code: sub main() SendPacket(theStartSessionPacket) // schicken läuft Do thePacket = GetPacket() //// Empfangen schläft fehl! Ab hier läuft mein Programm nicht mehr bzw. sehr sehr langsam denn es geht nicht weiter/////// If thePacket.Type = 0 And thePacket.PacketId = 6 Then Exit Do End If Loop end sub Public Function GetPacket() As GarminPacket Dim buffer As List(Of Byte) Dim bufferSize As Integer Dim data As Byte() Dim dataSize As Integer Dim packet As GarminPacket buffer = New List(Of Byte) Do data = New Byte(ASYNC_DATA_SIZE - 1) {} ///////////------------dieser Aufruf ist der grund warum mein programm ziemlich langsam läuft bzw. gar nicht! muß ich immer selber abbrechen-------------///////////// DeviceIoControl(hDevice, IOCTL_ASYNC_IN, IntPtr.Zero, 0, data, ASYNC_DATA_SIZE, dataSize, IntPtr.Zero) bufferSize += dataSize buffer.AddRange(New List(Of Byte)(data).GetRange(0, dataSize)) If dataSize = ASYNC_DATA_SIZE Then Exit Do Loop If buffer.Count > 0 Then packet = New GarminPacket() packet.Deserialize(buffer) If packet.Type = 0 And packet.PacketId = 2 Then ' DataAvailable ... packet = Nothing data = New Byte(MAX_BUFFER_SIZE - 1) {} dataSize = 0 ReadFile(hDevice, data, MAX_BUFFER_SIZE, dataSize, IntPtr.Zero) If dataSize > 0 Then buffer = New List(Of Byte)(data).GetRange(0, dataSize) packet = New GarminPacket() packet.Deserialize(buffer) Return packet End If Else Return packet End If End If End Function
> ///////////------------dieser Aufruf ist der grund warum >mein programm ziemlich langsam läuft bzw. gar nicht! muß ich immer >selber abbrechen-------------///////////// > DeviceIoControl(hDevice, IOCTL_ASYNC_IN, IntPtr.Zero, 0, >data, ASYNC_DATA_SIZE, dataSize, IntPtr.Zero) auch ohne deinen gesamten Programmcode gesehen zu haben, der Aufruf kann nur vor den Baum gehen. Schau dir nochmal die Spezifikation der Funktion an und was du als Strukturen übergibst. Ich finde es außerdem relativ mutig den Fehlercode nicht auszuwerten,sondern einfach anzunehmen das es geklappt hat.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.