.Net 1.1 Pause in Befehlsabarbeitung

Hallo zusammen,

ich möchte gerne aus meiner .Net Anwendung nacheinander mehrere vbs-skripte starten. Dazu möchte ich gerne in meinem Programm eine gewisse Zeit warten, bis die Skripte beendet sind. Daher meine Frage. Gibt es im .Net Framework 1.1 eine Funktion die die Befehlsabarbeitung für eine gewisse Zeit anhält? Ähnlich wie es bei Threads die Methode Sleep(int milliseconds) gibt!

Wär echt super wenn mir da jemand helfen kann!
Danke schon mal!

Matthias

Hallo Matthias,

Threading.Thread.Sleep(millisecondsTimeout As Integer)

Gruß
Thomas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Matthias,

die gewünschte Antwort hast Du ja.

Die Lösung macht das Programm aber instabil, eine gute Lösung ist das nicht. Eine gute Lösung würde prüfen, ob das letzte Script noch läuft und auf das Ende warten.

Leider kenne ich mich mit .Net zu wenig aus, um Dir eine funktionierende Lösung anbieten zu können, das könnte ich nur mit VB6. :frowning: Eventuell findet sich ja noch Jemand, der weiß, wie man das mit .Net löst. Ich hatte gehofft, daß das bereits Teil der ersten Antwort wird.

Gruß, Rainer

Hallo zusammen,

danke für eure Antworten. Ich habe das mit Sleep ausprobiert und es funktioniert auch. Hier noch eine kleine Erläuterung zu meinem Programmablauf. Beim laden meiner Anwendung vergleiche ich das jetzige Datum mit dem Datum des letztes Abrufs aus der Datenbank. Ist die Differenz größer als 1 Tag werden nacheinander die Skripte angestoßen und Daten aus SAP exportiert. Ist die Differenz kleiner als 1 Tag passiert nichts. Ich weiß ja nicht in wie weit das ganze mein Programm instabil macht, da es ja nicht jedes mal aufgerufen wird.
@ Rainer: Wie würdest du es in VB6 machen? Vielleicht kann ich es ja auf .Net übertragen.

Hallo,

@ Rainer: Wie würdest du es in VB6 machen? Vielleicht kann ich
es ja auf .Net übertragen.

Das geht sicher auch noch kürzer, ich hatte aber gerade keine bessere Idee. :smile:

Option Explicit

Const TH32CS\_SNAPHEAPLIST = &H1
Const TH32CS\_SNAPPROCESS = &H2
Const TH32CS\_SNAPTHREAD = &H4
Const TH32CS\_SNAPMODULE = &H8
Const TH32CS\_SNAPALL = (TH32CS\_SNAPHEAPLIST Or TH32CS\_SNAPPROCESS Or TH32CS\_SNAPTHREAD Or TH32CS\_SNAPMODULE)
Const TH32CS\_INHERIT = &H80000000
Const MAX\_PATH As Integer = 260
Private Type PROCESSENTRY32
 dwSize As Long
 cntUsage As Long
 th32ProcessID As Long
 th32DefaultHeapID As Long
 th32ModuleID As Long
 cntThreads As Long
 th32ParentProcessID As Long
 pcPriClassBase As Long
 dwFlags As Long
 szExeFile As String \* MAX\_PATH
End Type
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Function FindProcess(ByVal PID As Long) As Boolean
 Dim hSnapShot As Long, uProcess As PROCESSENTRY32, r As Long
 hSnapShot = CreateToolhelp32Snapshot(TH32CS\_SNAPALL, 0&amp:wink:
 uProcess.dwSize = Len(uProcess)
 r = Process32First(hSnapShot, uProcess)
 Do While r
 If uProcess.th32ProcessID = PID Then
 FindProcess = True
 End If
 r = Process32Next(hSnapShot, uProcess)
 Loop
 CloseHandle hSnapShot
End Function

Private Sub Command1\_Click()
 Dim PID As Long
 PID = Shell("wscript.exe C:\Test.vbs", 1)
 While FindProcess(PID) = True
 Sleep 50
 Wend
 'Hier käme der nächste Aufruf
 End
End Sub

Gruß, Rainer

Hallo!

Schau die einmal die Klasse System.Diagnostics.Process an. Hier auch zwei Links zum Lesen:
http://www.microsoft.com/germany/msdn/library/net/vb…
http://www.vbarchiv.net/archiv/tipp_1283.html

mfg
christoph

So,
ich habs jetz hinbekommen. Ich starte das skript als Prozess, lass mir die Id geben und prüfe in ner while-schleife ob dieser Prozess noch läuft! Funktioniert prima!
Vielen Dank für all eure Hilfe!

Matthias

Hi!
Mach doch nicht sowas :smile: - BusyWait ist total out.
System.Diagnostics.Process hat doch die wunderschöne Methode WaitForExit()

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hast Recht Marten! Vielen Dank!
Habs jetz auch so gemacht. Is dann auch etwas schlanker!

Matthias