problem mit thread.sleep funktion

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    problem mit thread.sleep funktion

    hallo

    ich habe ein problem bin noch relativ anfänger mit visual basic

    Mein Problem:

    ich speichere die gedruckten tasten auf der Tastatur in eine txt datei
    und die zeit wenn ein tastaturwechsel erfolgt auf eine extra txt datei

    einmal Time.txt
    und Direction.txt

    das auslesen der befehle aus der txt datei funktioniert und die entsprechende case anweisung wird ausgeführt
    ich möchte aber dass auch die zeit aus der txt datei ausgelesen wird und nach der zeit die case anweisungen ausgeführt wird
    ich wollte das mit der sleep funktion machen aber das funktioniert nicht
    die direction anweisungen werden bloss ganz schnell ausgeführt

    kann mir da jemand helfen wo das problem liegt

    das wäre super

    danke

    Try
    Dim objReader_x As New System.IO.StreamReader("C:\Users\XXX\Desktop\Direction.txt")
    Dim objReader_y As New System.IO.StreamReader("C:\Users\XXX\Desktop\Time.txt")
    System.Threading.Thread.Sleep(Convert.ToUInt32(objReader_y.ReadLine()))
    Do While objReader_x.Peek() <> -1

    Select Case objReader_x.ReadLine()

    Case "i" 'auto vorwärtz'
    Dir = "i"
    SendPacket()
    txt_read.Text = Dir

    Case "k" 'auto rückwärtz'
    Dir = "k"
    SendPacket()
    txt_read.Text = Dir

    Case "l" 'auto rechts'
    Dir = "l"
    SendPacket()
    txt_read.Text = Dir

    Case "j" 'auto links'
    Dir = "j"
    SendPacket()
    txt_read.Text = Dir

    Case Else
    Dir = "x"
    SendPacket()
    txt_read.Text = Dir

    End Select
    System.Threading.Thread.Sleep(Convert.ToUInt32(objReader_y.ReadLine()))
    Loop
    objReader_x.Close()
    objReader_y.Close()

    Catch Ex As Exception
    MsgBox(Ex.Message)
    End Try

    End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „pantro“ ()

    @pantro Willkommen im Forum. :thumbup:
    Benenne bitte Deinen Thread um in VB.NET :!:
    Dein Herangehen ist suboptimal.
    Lies alle Deine Dateien in ein String-Array ein:

    VB.NET-Quellcode

    1. Dim ar() = IO.File.ReadAllLines(DEIN_PFAD)

    Dann mach Dir einen Timer auf die Form und bei jedem Tick verarbeitest Du die nächste Zeile.
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    danke für deine antwort

    hast du mein problem verstanden mein deutsch ist nicht so gut....

    ich habe ein auto mit mikrocontroller den möchte ich vom pc steuern das funktioniert auch

    ich möchte aber einen modus haben dass er sich die tastenfolge merkt und diese dann automatisch ausführt

    und dazu brauche diese zeit dass er sich das speichert wann die tasten gewechselt hat

    kannst du mir ne kleine struktur vorgeben für deine lösung

    danke
    @pantro Dann musst Du die Taste beim Drücken an die Datei anhängen.
    Ich sehe schon, dass das mit den Zeilen nicht funktioniert, da müssen die Chars als String hinten dran gehängt werden:

    VB.NET-Quellcode

    1. IO.File.AppendAllText(PFAD, Taste)
    Umgekehrt liest Du den ganzen Text ein und arbeitest ihn zeichenweise ab:

    VB.NET-Quellcode

    1. Dim tasten = IO.File.ReadAllText(PFAD)
    Sieh Dir mal dieses Beispiel an:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private path As String = "c:\Temp\Tasten.txt"
    3. Private content As String
    4. Private Index As Integer
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. Me.content = IO.File.ReadAllText(Me.path)
    7. Me.Index = 0
    8. Me.Timer1.Enabled = True
    9. End Sub
    10. Private Sub Form1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles MyBase.KeyPress
    11. IO.File.AppendAllText(Me.path, e.KeyChar.ToString)
    12. End Sub
    13. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    14. Dim cc = Me.content(Me.Index)
    15. Me.ListBox1.Items.Add(cc.ToString) ' hier das zun, was zu tun ist
    16. Me.Index += 1
    17. If Me.Index >= Me.content.Length Then
    18. Me.Timer1.Enabled = False
    19. End If
    20. End Sub
    21. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    hi habe jetzt mehr code eingefügt hoffe ich habe ncihts vergessen um das zu verstehen weil gesamtcode sehr gross ist

    also wie ich schon sagte das einlesen und auslesen der txt datei wo die gedrückten tasten gespeichert werden

    das funktioniert deswegen wollte ich eigt da nichts ändern

    das mit den zeiten (elapsedtime) das funktioniert auch dass die zeit in txt gespeichert wird.

    ich habe ein modus manual da soll das auto vom pc gesteuert werden mit i,j,k,l und x

    dann habe ich ein modus route wo die gedrückten tasten in ein txt gespeichert wird und diese txt soll dann

    ausgelesen werden damit diese route vom manuel automatisch nachgefahren wird.

    und mir fehlt jetzt die zeit zu implementieren damit dann z,b. das auto soll gerade aus fahren

    und nach einer bestimmten zeit (die zeit wo in txt gespeichert wurde) soll das auto dann rechts fahren

    und das habe ich in dieser Auto_Drive funktion vesucht zu realisieren aber das funktioniert nicht

    es wird bloss die befehle (in richtiger reihenfolge so wie es in txt gespeichert wurde) ganz schnell

    nacheinander an mikrocontroller geschickt und das ist halt falsch





    VB.NET-Quellcode

    1. Private Sub Car_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress 'is used to detect which key pressed. and Create the Map'
    2. Dim c As Char
    3. c = e.KeyChar 'hier wird die Taste gespeichert welche gedrückt wurde vom Object e
    4. Select Case c
    5. Case "i" 'Vorwärts bewegung bei der gedrückten Taste i'
    6. Dir = "i" 'der buchstabe i wird in die dir Variable vom Packet gespeichert
    7. If Stopwatch_1.IsRunning Then
    8. Stopwatch_1.Stop()
    9. ElapsedTime = Stopwatch_1.ElapsedMilliseconds()
    10. Stopwatch_1.Reset()
    11. Stopwatch_1.Start()
    12. WriteFile() 'hier wird die Taste die gedruckt wurde in einem txt file gespeichert'
    13. Else
    14. Stopwatch_1.Restart()
    15. WriteFile()
    16. End If
    17. SendPacket()
    18. Case "k" 'rückwärts bewegung bei der gedrückten Taste k'
    19. Dir = "k"
    20. If Stopwatch_1.IsRunning Then
    21. Stopwatch_1.Stop()
    22. ElapsedTime = Stopwatch_1.ElapsedMilliseconds()
    23. Stopwatch_1.Reset()
    24. Stopwatch_1.Start()
    25. WriteFile()
    26. Else
    27. Stopwatch_1.Restart()
    28. WriteFile()
    29. End If
    30. SendPacket()
    31. Case "j" 'links bewegung bei der gedrückten Taste j'
    32. Dir = "l" 'rechts bewegung'
    33. If Stopwatch_1.IsRunning Then
    34. Stopwatch_1.Stop()
    35. ElapsedTime = Stopwatch_1.ElapsedMilliseconds()
    36. Stopwatch_1.Reset()
    37. Stopwatch_1.Start()
    38. WriteFile()
    39. Else
    40. Stopwatch_1.Start()
    41. WriteFile()
    42. End If
    43. SendPacket()
    44. Dir = "i" 'vorwärts bewegung'
    45. Case "l" 'rechts bewegung'
    46. Dir = "j" 'links bewegung'
    47. If Stopwatch_1.IsRunning Then
    48. Stopwatch_1.Stop()
    49. ElapsedTime = Stopwatch_1.ElapsedMilliseconds()
    50. Stopwatch_1.Reset()
    51. Stopwatch_1.Start()
    52. WriteFile()
    53. Else
    54. Stopwatch_1.Start()
    55. WriteFile()
    56. End If
    57. SendPacket()
    58. Dir = "i" 'vorwärts bewegung'
    59. Case "x" 'stopp bewegung Leertaste'
    60. Dir = "x"
    61. If Stopwatch_1.IsRunning Then
    62. Stopwatch_1.Stop()
    63. ElapsedTime = Stopwatch_1.ElapsedMilliseconds()
    64. Stopwatch_1.Reset()
    65. Stopwatch_1.Start()
    66. WriteFile()
    67. Else
    68. Stopwatch_1.Start()
    69. WriteFile()
    70. End If
    71. SendPacket()
    72. End Select
    73. End Sub
    74. Sub WriteFile() 'hier wird die Taste die gedruckt wurde in einem txt file gespeichert und die entsprechende zeit'
    75. Dim Dir_1(3) As Char
    76. Dim Time_str As String
    77. Dir_1 = Dir & vbCrLf
    78. Time_str = ElapsedTime.ToString & vbCrLf
    79. Try
    80. If new_file = 0 Then 'hier wird was reingeschrieben wenn nichts drin ist
    81. File.WriteAllText("C:\Users\XXX\Desktop\Direction.txt", Dir_1)
    82. File.WriteAllText("C:\Users\XXX\Desktop\Time.txt", Time_str)
    83. new_file = 1
    84. Else 'hier wird es überschrieben bei Manual
    85. File.AppendAllText("C:\Users\XXX\Desktop\Direction.txt", Dir_1)
    86. File.AppendAllText("C:\Users\XXX\Desktop\Time.txt", Time_str)
    87. End If
    88. Catch Ex As Exception
    89. MsgBox(Ex.Message)
    90. End Try
    91. End Sub
    92. Private Sub Auto_Drive() 'hier wird die map erstellt KeyPreview disable und stop the Stopwach (if running) to aovid disturbance
    93. Me.KeyPreview = False
    94. new_file = 0
    95. If Stopwatch_1.IsRunning Then
    96. Stopwatch_1.Stop()
    97. Stopwatch_1.Reset()
    98. End If
    99. Try
    100. Dim objReader_x As New System.IO.StreamReader(".C:\Users\XXX\Desktop\Direction.txt.txt")
    101. Dim objReader_y As New System.IO.StreamReader(".C:\Users\XXX\Desktop\Direction.txt.txt")
    102. System.Threading.Thread.Sleep(Convert.ToUInt32(objReader_y.ReadLine()))
    103. Do While objReader_x.Peek() <> -1
    104. Select Case objReader_x.ReadLine()
    105. Case "i" 'auto vorwärtz'
    106. Dir = "i"
    107. SendPacket()
    108. txt_read.Text = Dir
    109. Case "k" 'auto rückwärtz'
    110. Dir = "k"
    111. SendPacket()
    112. txt_read.Text = Dir
    113. Case "l" 'auto rechts'
    114. Dir = "l"
    115. SendPacket()
    116. txt_read.Text = Dir
    117. Case "j" 'auto links'
    118. Dir = "j"
    119. SendPacket()
    120. txt_read.Text = Dir
    121. Case Else
    122. Dir = "x"
    123. SendPacket()
    124. txt_read.Text = Dir
    125. End Select
    126. System.Threading.Thread.Sleep(Convert.ToUInt32(objReader_y.ReadLine()))
    127. Loop
    128. objReader_x.Close()
    129. objReader_y.Close()
    130. Catch Ex As Exception
    131. MsgBox(Ex.Message)
    132. End Try
    133. End Sub
    @pantro Beschreib mal verbal, was passieren soll.
    AppendAllText geht auch bei einer nicht vorhandenen Datei.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    hi

    ich habe jetzt doch nochmal eine andere frage bezüglich das auslesen ich habe im forum ncihts passendes gefunden für mein problem

    ich möchte die datei nicht vom anfang sondern ab der zweiten zeile aus bist zum ende auslesen

    VB.NET-Quellcode

    1. Dim objReader_y As New System.IO.StreamReader("C:\Users\XXX\Desktop\Time.txt")


    hier habe ich ja jetzt die zeit in objReader_y gespeichert

    und möchte jetzt von der 2. zeile bis ende auslesen

    wenn ich aber sage

    VB.NET-Quellcode

    1. do while objReader_y,peek() <> -1
    2. objReader_y.Readline()
    3. End select
    4. loop
    5. objReader_y.close()


    dann liest der ja hier von anfang bis zum ende wie muss ich die Readline() funktion so schreiben damit er ab der zweiten zeile bist zum ende liest

    danke
    @pantro Nimm ReadAllLines(), kontertiere das Attay mit .ToList() in eine List(Of String), mit .RemoveAt(0) ist die 1. Zeile weg.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    pantro schrieb:

    ich hätte da ne frage
    zu Programmierfragen nur über das Forum.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!