vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: Prozess starten und warten (aber ohne Einfrieren) 
Autor: ModeratorDaveS (Moderator)
Datum: 19.02.09 10:03

Hier ist ein etwas anderer Ansatz mit Event. Um den Code allgemein verwendbar zu machen benutze ich ein Delegate für die "Aufräumarbeit" wenn der Prozess fertig ist. So bleibt die Anwendung selbst (Benutzeroberfläche) aktiv.
    ' Process handling
    Public Delegate Sub BeendetHandler(ByVal gekillt As Boolean)
 
    Private WithEvents Prozess As Process
    Private ProzessBeendet As Boolean
    Private Sekunden As Integer
    Private Aufräumen As BeendetHandler
    Private Zeitaus As Integer
 
    Public Sub ProzessStarten(ByVal Programm As String, ByVal Parameter As _
      String, ByVal Aufräumen As BeendetHandler, ByVal TimeoutSekunden As _
      Integer)
        Me.Aufräumen = Aufräumen
        Prozess = New Process
        ProzessBeendet = False
        Dim ProzessInfo As New ProcessStartInfo(Programm, Parameter)
        ProzessInfo.CreateNoWindow = True
        ProzessInfo.WindowStyle = ProcessWindowStyle.Hidden
        ProzessInfo.UseShellExecute = False
        Prozess.StartInfo = ProzessInfo
        Prozess.EnableRaisingEvents = True
        Prozess.Start()
        Timer1.Enabled = True
        Zeitaus = TimeoutSekunden
        Sekunden = 0
    End Sub
 
    Private Sub Prozess_Exited(ByVal sender As Object, ByVal e As _
      System.EventArgs) Handles Prozess.Exited
        ProzessBeendet = True
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Timer1.Tick
        If ProzessBeendet Then
            Timer1.Enabled = False
            Aufräumen(False)
        Else
            Sekunden += 1
            If Sekunden >= Zeitaus Then
                Timer1.Enabled = False
                Prozess.Kill()
                Aufräumen(True)
            End If
        End If
    End Sub
    ' Anwendung
 
    ' Notepad starten
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        ProzessStarten("Notepad.exe", String.Empty, AddressOf Button1Aufräumen, _
          10)
    End Sub
 
    ' Aufgerufen wenn Notepad Prozess beendet
    Private Sub Button1Aufräumen(ByVal gekillt As Boolean)
        Button1.Enabled = True
        If gekillt Then
            MsgBox("Prozess gekillt!")
        Else
            MsgBox("Prozess beendet!")
        End If
    End Sub

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Prozess starten und warten (aber ohne Einfrieren)3.408Acki@warmup17.02.09 18:03
Re: Prozess starten und warten (aber ohne Einfrieren)2.866ModeratorDaveS17.02.09 19:55
Re: Prozess starten und warten (aber ohne Einfrieren)3.473Acki@warmup18.02.09 16:57
Re: Prozess starten und warten (aber ohne Einfrieren)3.258ModeratorDaveS19.02.09 10:03

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel