warten bis datei erstellt ist

  • VB6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Mad Andy.

    warten bis datei erstellt ist

    hi leutz.
    ich hab ein ein prob und obwohl ich viel dazu in foren(auch hier) gefunden habe bekomme ich es nicht hin!!
    bin leider noch ziemlich neu in vb.
    ich hoffe mir kann wer weiter helfen.

    also ich hab ein prog(ne art mail-programm) das ne PDF-datei bekommt und diese anzeigt.
    dann kann der benutzer änderungen ausführen und ich generiere die pdf neu..

    alles kein prob..
    und jetzt kommts.
    ich zeig die PDF datei als in nem webbrowser fenster an und muss um diese zu verändern das fenster kurz mit ner leeren datei füllen. dann will ich warten bis die datei erstellt ist und ERST DANN das browserfenster wieder mit der richtigen datei füllen.

    habs mit sleep probiert, dann hab ich probiert das alter der datei in ner schleife auszulesen und sobald sich das verändert die neue einzulesen.. und und und..

    also gehen tut es einwandfrei wenn ich ne MsgBox dazwischen klemme und ne sekunde warte...

    ABER NUR DANN!!

    so in der richtung sieht das dann aus

    ' anderes PDF(leeresDokument) anzeigen damit es verändert werden kann
    Call WebBrowser1.Navigate2(path_exportdata & "leeresDokument.pdf")

    ' Aufruf von prog das die PDF erstellt
    Shell path_progDasPdfErstellt & " " & path_datenPDF, vbNormalFocus

    ' wenn hier ne sekunde warte gehts.. aber mit sleep oder schleife usw. nicht
    MsgBox ("wait")

    ' PDF wieder aufrufen
    Call WebBrowser1.Navigate2(path_exportdata & ident & ".pdf")

    ich hoffe mir kann wer helfen.. hab auch schon versucht zu fragen ob das programmm das ich aufrufe (ne .exe) aus ist, also in ner schleife.. aber das will auch nicht!!
    bin dankbar für jeden tipp
    Kannste nicht einfach über nen Timer das aktualisierte PDF periodisch immer wieder neu laden? Wenns fertig ist, wirds schon erscheinen, oder? Je nach voraussichtlicher Dauer kannste den Aufruf ja auf ein paar Mal begrenzen, damit nicht andauernd nachgeladen wird. Evtl. besteht auch die Möglichkeit festzustellen, ob das Browserfesnster seinen Inhalt schon hat oder nicht. Das weiss ich jetzt aber nicht genau...
    ich weiss ja net was vb das macht ?!?!?!
    ich hab wie du vorgesclagen hast nen timer gesetzt der(erst mal) 2 sekunden wartet..
    danach wird dann das ganze als mail verschickt..
    das komische dabei, zuerst ruf ich die pause auf und dann die mail methode/funktion.
    "pause" wird also aufgerufen aber sie tritt erst nach versenden der mail in aktion?"!?!?!?!

    müsste das nicht nacheinander abgearbeitet werden???
    ich progge ja normalerweise java und da geht da!!
    Der Timer arbeitet im eingestellten Intervall die Befehle ab. Das heisst, wenn Du den Timer nicht beendest, wiederholt der seine Befehlskette immer wieder. Deswegen meinte ich ja, den nach 2-3 Mal abzubrechen, damit nicht ständig alles wiederholt wird, was schon längst erledigt ist.
    wir reden glaub aneinander vorbei ;)
    sry..
    ich will doch gar nichts anderes wie das mein programm wartet bis ne pdf erstellt ist und dann erst weiter macht!!!
    aber das geht einfach nicht!!!

    habs jetzt auch mal so probiert

    Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Private Declare Function OpenProcess _
    Lib "kernel32" ( _
    ByVal dwDesiredAccess As Long, _
    ByVal bInheritHandle As Long, _
    ByVal dwProcessId As Long) _
    As Long

    Private Sub shellAndWait()
    Dim ShellId As Long
    Dim ShellHandle As Long
    ShellId = Shell(path_pdfprog & " " & path_spool, vbNormalFocus)
    ShellHandle = OpenProcess(Synchronize, 0, ShellId)
    'MsgBox (ShellId & " " & ShellHandle)
    If ShellHandle <> 0 Then
    WaitForSingleObject ShellHandle, 2000
    End If
    End Sub

    aber da ist mein ShellHandle immer 0
    wenn ich die MsgBox dazwischen drin zuschalte gehts,
    da so wie es aussieht mein prog im hintergrund weiter läuft und das pdf erzeugt

    es kann doch net sein..

    Visual Basic-Quellcode

    1. Option Explicit
    2. 'API-Deklerationen
    3. Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
    4. 'Variablen
    5. Private AbortAction as Boolean 'Damit das warten von
    6. 'außerhalb unterbrochen werden kann
    7. 'der Button mit dem der Vorgang gestartet wird
    8. Private Sub Command1_Click()
    9. Command1.Enabled = False 'Startmöglichkeit sperren
    10. '[...]
    11. 'Warteschleife:
    12. While not (NewDate > OldDate)
    13. DoEvents 'sicherstellen, dass das Programm nicht "einfriert"
    14. If AbortAction then
    15. Exit Sub
    16. End If
    17. Sleep 40 'CPU "schonen"
    18. Wend
    19. '[...]
    20. Command1.Enabled = True '... wieder freigeben
    21. End Sub


    Das NewDate > OldDate ist ein Pseudoausdruck; damit ist die Datei-Alter-Prüfung gemeint.


    so long..
    Andy

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mad Andy“ ()