GUI schließbar halten bei längerfristigen Aktionen

  • wie kann ich dafür sorgen, dass eine GUI, die in einer schleife länger arbeitet, trotzdem schließbar bleibt?

    Ich habe Adlibenable ausprobiert, jedoch kann ich teilweise dannauf buttons klicken ohne das etwas passiert.....

  • Bitte poste doch dein Script.. eine Gui ist immer schliegbar, sowohl im GuiEventMode als auch mit GuiGetMsg...

  • [autoit]


    while 1
    $Msg = GUIgetMsg()
    switch $msg

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

    Case $button1
    .... lange berechnung ....
    Case $button2

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

    Case $button3
    wend

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

    func adlib()
    if $msg = $GUI_EVENT_CLOSE then Exit
    endfunc

    [/autoit]

    findet nun die lange berechnung statt, friert die GUI ein und ist daher nicht schließbar

    klar ist die GUI immer schließbar - wenn ich den Process von extern kille ^^

  • Ne daran kann man nix machen.. du könntest höchstens während deiner langen berechnung ab und zu den msg-code abfragen..
    Oder poste doch einfach deine Berechnung, vllt kann man da was kürzen..

    • Offizieller Beitrag

    Probier mal das aus :

    Spoiler anzeigen
    [autoit]

    while 1
    $Msg = GUIgetMsg()
    switch $msg

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

    Case $button1
    .... lange berechnung ....
    Case $button2

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

    Case $button3
    wend

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

    func adlib()
    $msg1 = GUIGetMsg()
    if $msg1 = $GUI_EVENT_CLOSE then Exit
    endfunc

    [/autoit]

    Bei deinem Script wird bei AdlibEnable die GuiMsg ja gar nicht ausgelesen . $Msg bekommt nur beim Schleifenanfang einen Wert zugewiesen .

  • Das funktioniert, allerdings habe ich dann bei frisch gestarteter Gui schon viel systemlast.
    adlib alle 20ms : 25% last
    adlib alle 100ms: 50%last,schließen-delay von 1 sekunde
    adlib alle 200ms: 50%last, schließen-delay von 3 sekunden

  • Hallo LilProgger208,

    ich würde versuchen die lange_Berechnung in Teile zu gliedern, und nur über einen Status die nächste Teilberechnung ansteuern und auf Adlib ganz verzichten

    [autoit]

    while 1
    $Msg = GUIgetMsg()
    switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button1
    $Status = 1
    berechnung(1)
    EndSwitch
    wend

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

    func berechnung($iStat)
    switch $iStat
    Case 1
    Teilrechnung
    Case 2
    nochne Teilrechnung
    EndSwitch
    EndFunc

    [/autoit]

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (21. Mai 2009 um 17:13)

  • würde ich das so machen, hätte ich tonnenweise doppelten Code...

    keiner ne andere Idee?

    Einmal editiert, zuletzt von LilProgger208 (25. Mai 2009 um 13:37)