Pause / Fortsetzen Button

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von sannicolao.

    Pause / Fortsetzen Button

    Hallo liebe Forum Gemeinde ;)

    Ich habe ein Programm bei welchem ich gerne einen Pause Button einbauen möchte. Es soll einer sein, der das gesamte Programm stoppt. Egal wo sich das Programm befindet. Zudem soll dieser Zustand solange gespeichert werden bis das Programm mit einem seperaten Button "Fortstzen" wieder weitergeführt wird.

    Leider habe ich noch keine passende Lösung gefunden und wäre über jeden Lösungsansatz dankbar ;)

    lg

    sannicolao
    Mhhhh, das ist schwirig.

    Mit dem befehl [VB]Threading.Trhead.Sleep(Zeit in MS) kann man das Programm in einen Schlafzustand bringen.

    Aber ich weis nicht ob das auch permanent geht, da wenn das Programm gestoppt ist, auch der Button gesperrt ist ;) also müsste die form in einem anderen Thread sein!
    Es ist ja nicht so, dass der gleiche Button auch der Fortsetzungs - Button sein muss. Mir reichts, wenn ich einen Pause Button hab. Und einen Fortsetzt - Button.
    Mit Sleep kann ich nur eine gewisse Zeit angeben. Was für mich nicht wirklich eine passende Lösung ist.

    vielen Dank für dein Feedback
    Wie meinst du die Zeit speichern?
    Welche Zeit?

    Eine andere Frage ist ebenfalls aufgetaucht. Ich möchte gerne einen Fortschrittsanzeige machen, welche NUR von der Zeit abhängig ist. Also sprich nach 10 Sekunden nach dem Start gedrückt wurde ist es fertig. SOllte nicht so schwer sein oder?
    hab aber leider auch noch keine Lösung.

    Vielen Dank

    Gruss

    sannicolao
    Deine Ursprungsfrage ist total Programmabhängig...
    Was soll denn Stoppen ? Was läuft denn ?
    So allgemeine Fragen.. sind unbeantwortbar !
    Dazu müsste man sich ja erst ein Programm überlegen, was man stoppen kann, und dies dir dann posten !?!?!
    Poste den Code, der "läuft", und du bekommst sicher einen Hinweis, wie man ihn pausiert..
    Das ist meine Signatur und sie wird wunderbar sein!

    Mono schrieb:

    Deine Ursprungsfrage ist total Programmabhängig...
    Was soll denn Stoppen ? Was läuft denn ?
    So allgemeine Fragen.. sind unbeantwortbar !
    Dazu müsste man sich ja erst ein Programm überlegen, was man stoppen kann, und dies dir dann posten !?!?!
    Poste den Code, der "läuft", und du bekommst sicher einen Hinweis, wie man ihn pausiert..



    Sorry das ich solange auf mich warten liess. Hatte heute noch Schule.

    Folgender Code habe ich bereits zusammen gestellt:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim Zaehler As Integer
    3. Dim Ende As Integer
    4. Private Sub GO_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GO.Click
    5. Dim Zeit As Integer
    6. Zaehler = 0
    7. Timer1.Enabled = True
    8. Zeit = Int(TextBox2.Text)
    9. Timer1.Interval = Zeit * 1000
    10. End Sub
    11. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    12. Ende = Int(TextBox1.Text)
    13. 'MsgBox("Die Zeit ist abgelaufen !")
    14. Zaehler = Zaehler + 1
    15. ShowInTaskbar = False
    16. If Zaehler = Ende Then
    17. Timer1.Enabled = False
    18. MsgBox("Programm kann geschlossen werden")
    19. Exit Sub
    20. End If
    21. Call Timer1_OnTimer()
    22. End Sub
    23. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    24. Dim AnzahlMails As Integer
    25. AnzahlMails = Int(TextBox1.Text)
    26. End Sub
    27. Sub Timer1_OnTimer()
    28. Dim Time As Date
    29. Dim Server As Object
    30. Dim Benutzername As Object
    31. Dim schema As String = "http://schemas.microsoft.com/cdo/configuration/"
    32. Dim Nachricht, Flds, iMsg, iConf, Port, Passwort, Empfaenger, Absender, strbody As Object
    33. Dim Pfad As Object
    34. 'Dim Pfad2 As String
    35. Server = TextBox3.Text
    36. Port = Int(TextBox4.Text)
    37. Absender = TextBox5.Text
    38. Empfaenger = TextBox6.Text
    39. Nachricht = TextBox7
    40. Pfad = TextBox8
    41. Benutzername = TextBox9
    42. Passwort = TextBox10.Text
    43. 'Pfad2 = Pfad
    44. Timer2.Start()
    45. iMsg = CreateObject("CDO.Message")
    46. iConf = CreateObject("CDO.Configuration")
    47. iConf.Load(-1)
    48. Flds = iConf.Fields
    49. With Flds
    50. Flds.Item(schema & "sendusing") = 2
    51. Flds.Item(schema & "smtpserver") = Server
    52. Flds.Item(schema & "smtpserverport") = Port
    53. Flds.Item(schema & "smtpauthenticate") = 1
    54. Flds.Item(schema & "sendusername") = "mail@gmail.com"
    55. Flds.Item(schema & "sendpassword") = Passwort
    56. Flds.Item(schema & "smtpusessl") = 1
    57. Flds.Update()
    58. End With
    59. Time = Format$(Now, "General Date")
    60. strbody = "Hallo"
    61. 'sendto = Empfaenger
    62. With iMsg
    63. .Configuration = iConf
    64. .To = Empfaenger
    65. .CC = ""
    66. .BCC = ""
    67. .From = Absender
    68. .Subject = "subject"
    69. .TextBody = strbody
    70. 'Dim oAttch As Net.Mail.Attachment = New Net.Mail.Attachment("C:\Test.txt")
    71. '.Attachments.Add("C:\Test.txt")
    72. .Send()
    73. End With
    74. End Sub
    75. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    76. Using Pfad As New OpenFileDialog()
    77. Pfad.InitialDirectory = "C:"
    78. If Pfad.ShowDialog() = DialogResult.OK Then
    79. Dim Endpfad As String = Pfad.FileName
    80. If Endpfad = "" Then
    81. Else
    82. TextBox8.Text = Endpfad
    83. End If
    84. End If
    85. End Using
    86. End Sub
    87. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    88. Exit Sub
    89. End Sub
    90. Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    91. Dim AnzahlMails As Integer
    92. Dim AnzahlSek As Integer
    93. Dim Timertotal As Long
    94. AnzahlMails = TextBox1.Text
    95. AnzahlSek = TextBox2.Text
    96. Timertotal = (AnzahlMails * AnzahlSek)
    97. ProgressBar1.Maximum = Timertotal
    98. ProgressBar1.Increment(1)
    99. Label10.Text = ProgressBar1.Value
    100. If ProgressBar1.Value = ProgressBar1.Maximum Then
    101. End If
    102. End Sub
    103. End Class


    Ich weiss, dass es noch eine "offene Baustelle" ist.
    Z.B. funktioniert auch die Mailabsender Adresse zum eingeben nicht... :S
    aber Hauptthema soll das Stoppen und Fortsetzen dieses Programm sein.

    Das andere Problem habe ich mitlerweilen gelöst ;) hehe

    lg
    und Danke:)

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

    Mono schrieb:

    Wie wäre es, wenn du einfach per Button Klick die Timer stoppst ? Und bei Fortsetzen wieder startest ?


    Wenn ich ihn stoppe und wider starte so beginnt er von Anfang an. Er soll jedoch von dem Punkt weiter machen, an dem er pausiert wurde.

    Vielen Dank Mono.

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

    sannicolao schrieb:

    Er soll jedoch von dem Punkt weiter machen, an dem er pausiert wurde.

    Ich würde mal sagen, dass dein kompletter Ansatz von Grund auf "falsch" ist.
    Eine "Anwendung anhalten" ist irgendwie sinnlos, insbesondere wenn es deine eigene ist. Definiere am besten erstmal, was es heißt, dass die Anwendung "läuft". Theoretisch könntest du einen zweiten Thread starten und den GUI-Thread per Thread.Suspend anhalten. Allerdings hast du dann den Effekt, dass deine Anwendung nicht mehr reagiert - auf alles! Also nix mehr mit Form verschieben, Redraw etc.
    Wenn du es Unbrauchbar machen möchtest mach einfach:

    Button1 = Pause
    Button2 = Fortsetzen

    VB.NET-Quellcode

    1. Private Sub Formanhalten()
    2. For Each Control as Control in me.Controls
    3. Control.enabled = false
    4. Next
    5. Button2.enabled = true
    6. End Sub
    7. Private Sub Formfortsetzen()
    8. For each Control as Control in me.Controls
    9. Control.enabled = true
    10. Next
    11. Button1.click......
    12. Formanhalten
    13. End sub
    14. Button2.click.....
    15. Formfortsetzen
    16. End sub




    MFG


    MArkus

    picoflop schrieb:

    sannicolao schrieb:

    Er soll jedoch von dem Punkt weiter machen, an dem er pausiert wurde.

    Ich würde mal sagen, dass dein kompletter Ansatz von Grund auf "falsch" ist.
    Eine "Anwendung anhalten" ist irgendwie sinnlos, insbesondere wenn es deine eigene ist. Definiere am besten erstmal, was es heißt, dass die Anwendung "läuft". Theoretisch könntest du einen zweiten Thread starten und den GUI-Thread per Thread.Suspend anhalten. Allerdings hast du dann den Effekt, dass deine Anwendung nicht mehr reagiert - auf alles! Also nix mehr mit Form verschieben, Redraw etc.



    Wie du siehst handelt es sich um einen Test, welcher ein System auf Auslastung testet.
    Da wäre es eigentlich sinnvoll einen Pause - Button kreieren zu können. Aber ich habe das ganze nun mit Timer1.stop sowie Timer2.Stop gemacht. Passt scho ;) hehe lg


    Edit:
    Vielen Dank an markushettmann!

    Genau das habe ich gesucht:)