GUI friert ein

  • Hallo liebe AutoIt coder,

    ich arbeite erst seit ein paar tagen mit AutoIt und kann einfach nicht folgendes Problem lösen:

    Das Programm verschiebt Dateien von einem Pfad zum anderen (sehr simpel), das Problem hierbei ist, wenn eine Datei etwas größer ist friert die GUI für die Dauer des verschiebens ein. GUI mode:

    Code
    Opt("GUIOnEventMode", 1)

    Wie kann man den Prozess auslagern o.ä., damit die GUI weiterhin reagiert? Habe bei google gesucht und natürlich hier aber nichts zu einem solchen Thema gefunden. Ich poste extra keinen Code, da ich es als ein programmunabhängiges Problem sehe.

    Gruß

    Protaris

    Einmal editiert, zuletzt von Protaris (3. Juli 2012 um 14:36)

  • Hallo,

    ich glaube die Lösung gefunden zu haben. Ich habe die move Funktion in eine eigene Funktion ausglagert und diese wird von der while-Schleife aufgerufen. Somit ist es möglich auf GUI-Events weiterhin zu reagieren.

    Fals dies ein flascher Ansatz ist, bitte ich euch mich zu korrigieren, solange lasse ich diesen Thread auf Status = Offen.

  • Du könnntest auch einfach eine weitere Exe-Datei erzeugen, der du die benötigten Informationen per Parameter mitgibst. Gerade beim Verschieben sollte das gut machbar sein, da keinerlei Daten an das Hauptprogramm zurückgesendet werden müssen (so wie ich das verstehe).

    Gruß stay

  • Wäre auch eine gute Möglichkeit, jedoch ist es in meinem Fall besser mit einer *.exe zu arbeiten (oder gibt es eine Möglichkeit aus mehreren *.au3 dateien eine *.exe zu erstellen?).

  • Vielleicht kannst du auch auf die Windows-Eigenen Funktionen zurückgreifen:
    Die "MOVE.EXE".
    Damit kann man auch über Parameter Dateien verschieben (In CMD.EXE funktioniert das genauso).

    Und dann könnte man Stay's Ansatz noch weiter ausbauen: Eine weitere, seperate *.exe-Datei ist zwar eine Möglichkeit, allerdings sind 2 Dateien immer doof, wenn man die gleiche Funktionalität auch mit einer erreichen kann. ;)
    Hier lautet das Stichwort Startparameter, bzw. das vordefinierte Array $CmdLine.

    [autoit]


    If $CmdLine[0] >= 1 And $CmdLine[1] = "Funktion2" Then
    MsgBox(0,"","Dies hier ist Funktion 2!")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"","Dies hier ist Funktion 1!")
    ShellExecute(@ScriptName,"Funktion2")
    Exit

    [/autoit]


    Ich hoffe, das Beispiel konnte verdeutlichen, was ich meine. ;)

    lg chess

    Edit:
    Ok, FileInstall ist auch eine Möglichkeit. ;)