Programm überwachen mit Procress.Responding

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Programm überwachen mit Procress.Responding

    Hallo,

    falls mein Hauptprogramm sich mal aufhängen sollte, habe ich ein Nebenprogramm laufen, was auf diesen Fehler reagieren soll.

    Code Nebenprogramm:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Public Class Menue
    4. Private ProzHome As Process
    5. Private Sekunden As Integer
    6. Private SekSet As Integer
    7. Private Sub Menue_Load(sender As Object, e As EventArgs) Handles Me.Load
    8. Visible = False
    9. Opacity = 0
    10. Visible = True
    11. CenterToScreen()
    12. With Timer_Pruefung
    13. .Enabled = False
    14. .Interval = 5000
    15. End With
    16. With Timer_Aktion
    17. .Enabled = False
    18. .Interval = 1000
    19. End With
    20. SekSet = 120
    21. Sekunden = SekSet
    22. ProzHome = New Process
    23. Dim Programm() As Process = Process.GetProcessesByName("MBHome")
    24. If Not Programm.Count = 0 Then
    25. ProzHome = Programm(0)
    26. ProzHome.StartInfo.FileName = "C:\MBHome\Intern\Programm\MBHome.exe"
    27. Timer_Pruefung.Enabled = True
    28. End If
    29. End Sub
    30. Private Sub Timer_Pruefung_Tick(sender As Object, e As EventArgs) Handles Timer_Pruefung.Tick
    31. If Not ProzHome.Responding Then
    32. Aktion()
    33. End If
    34. End Sub
    35. Private Sub Aktion()
    36. Sekunden = SekSet
    37. Button_Neustart.Text = "Neustart in " & Sekunden.ToString & " Sekunden"
    38. Timer_Pruefung.Enabled = False
    39. Opacity = 1
    40. Timer_Aktion.Enabled = True
    41. End Sub
    42. Private Sub Timer_Aktion_Tick(sender As Object, e As EventArgs) Handles Timer_Aktion.Tick
    43. Sekunden -= 1
    44. Button_Neustart.Text = "Neustart in " & Sekunden.ToString & " Sekunden"
    45. If Sekunden = 1 Then
    46. Timer_Aktion.Enabled = False
    47. Neustart()
    48. End If
    49. End Sub
    50. Private Sub Neustart()
    51. Opacity = 0
    52. ProzHome.Kill()
    53. Threading.Thread.Sleep(3000)
    54. ProzHome.Start()
    55. Threading.Thread.Sleep(3000)
    56. ProzHome = New Process
    57. Dim Programm() As Process = Process.GetProcessesByName("MBHome")
    58. If Not Programm.Count = 0 Then
    59. ProzHome = Programm(0)
    60. ProzHome.StartInfo.FileName = "C:\MBHome\Intern\Programm\MBHome.exe"
    61. Timer_Pruefung.Enabled = True
    62. End If
    63. End Sub
    64. Private Sub Button_Neustart_Click(sender As Object, e As EventArgs) Handles Button_Neustart.Click
    65. Timer_Aktion.Enabled = False
    66. Neustart()
    67. End Sub
    68. Private Sub Button_Deaktivieren_Click(sender As Object, e As EventArgs) Handles Button_Deaktivieren.Click
    69. Timer_Aktion.Enabled = False
    70. Sekunden = SekSet
    71. Opacity = 0
    72. Timer_Pruefung.Enabled = True
    73. End Sub
    74. Private Sub Button_Beenden_Click(sender As Object, e As EventArgs) Handles Button_Beenden.Click
    75. Close()
    76. End Sub
    77. End Class




    Nun startet dieses Nebenprogramm sporadisch ohne ersichtlichen Grund, dass Hauptprogramm neu.
    Ist Responding für mein Vorhaben nicht geeignet oder mache ich im Code einen Fehler?
    Gruß Markus
    @Westerwälder Was tut das Programm, was soll es tun?
    Kannst Du das verbal beschreiben?
    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!
    Hallo Rod,

    wie schon oben geschrieben, soll dieses Programm ein anderes Programm überwachen, d.h.
    hängt sich das zu überwachende Programm auf, soll das Überwachungsprogramm das
    Hauptprogramm (was sich aufgehängt hat) beenden und wieder neu starten.
    Gruß Markus
    @Westerwälder Wie erkennt das überwachende Programm, dass das überwachte hängt?
    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!
    @Westerwälder Wie äußert sich das beim überwachten Programm?
    Wenn da wegen einem Thread die GUI klemmt, wird es also rausgeschmissen?
    Um Dir zu helfen, muss ich das reproduzieren.

    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!
    Passiert regelmäßig in einer Sub, die ein Excelblatt erstellt und anschließend ausdruckt.
    Dieser Vorgang wird in einem BGW ausgeführt.
    Drucke alle meine Dokumente auf diese Weise.
    Führe ich den Druckvorgang in der IDE aus, funktioniert alles wie gewünscht.
    In der Exe friert dann die Form ein.
    Gruß Markus
    Da stimmt dann aber was nicht - wenn man vom BGW absieht, der ziemlich obsolet ist. Wenn das Nebenläufige richtig implementiert ist, ist das Form ganz normal ansprechbar. Wenn es bei Dir frostet, dann läuft im GUI-Thread was Arbeitsintensives ab.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Westerwälder schrieb:

    Die Form friert ein.
    Starte das Programm im Debugger und mach ein Break um festzustellen, wo es klemmt.
    Mach desweiteren Console-Ausgaben, um den Ablauf zu verfolgen:
    Kommunikation zwischen Console und Form
    Angehängte Console kann nicht direkt geschlossen werden.
    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!