Progress-Balken mit Cancel-Funktion

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Progress-Balken mit Cancel-Funktion

    Hallo zusammen,

    ich hab' letztens begonnen in Xcode 4 mit Cocoa Applescript zu programmieren. Dabei bin ich auf folgendes Problem gestoßen, für das ich leider keine Lösung habe:

    Das folgende Script funktioniert in dem Sinne, dass man den Start-Button (linked mit clickedStart_(...)) drückt, ein Prozess startet und der Progress-Balken "myProgressBar" läuft.

    Was nicht klappt ist, dass sich während der Repeat-Schleife der Cancel-Button (linked mit clickedStop_(...)) drücken ließe um den Process vorzeitig abzubrechen. Beide Buttons ("Start" und "Cancel") sind nach einmaligem Drücken von "Start" eingefroren. Erst wenn der Prozess zu Ende ist, kann man wieder einen Button drücken [Blockierte Grafik: http://www.fischer-bayern.de/phpBB2/images/smiles/icon_sad.gif]

    Was mache ich falsch? Wie kann ich einen Prozess im Hintergrund laufen lassen, dessen Fortschritt über den Progress-Balken angezeigt wird, und der sich nahezu jederzeit über den Cancel-Button abbrechen lässt?

    Danke im Voraus für Eure Hilfe, Sese [Blockierte Grafik: http://www.fischer-bayern.de/phpBB2/images/smiles/icon_smile.gif]

    Quellcode

    1. -- Cocoa Applescript Application
    2. --
    3. -- AppDelegate.applescript
    4. -- SimpleProgressBar
    5. --
    6. script AppDelegate
    7. property parent : class "NSObject"
    8. property myProgressBar : missing value
    9. property myPleaseStop : false
    10. on myRun_()
    11. -- init
    12. set myProgressBar's isIndeterminate to false
    13. myProgressBar's setMinValue_(0)
    14. myProgressBar's setMaxValue_(100)
    15. end myRun_
    16. on clickedStop_(aNotification)
    17. -- set stop flag
    18. set myPleaseStop to true
    19. end clickedStop_
    20. on clickedStart_(aNotification)
    21. -- start progress
    22. set myPleaseStop to false
    23. repeat with myCounter from 1 to 5
    24. myProgressBar's incrementBy_(20.0)
    25. delay 2
    26. if myPleaseStop is true then exit repeat
    27. end repeat
    28. end clickedStart_
    29. on applicationWillFinishLaunching_(aNotification)
    30. -- Insert code here to initialize your application before any files are opened
    31. myRun_()
    32. end applicationWillFinishLaunching_
    33. on applicationShouldTerminate_(sender)
    34. -- Insert code here to do any housekeeping before your application quits
    35. return current application's NSTerminateNow
    36. end applicationShouldTerminate_
    37. end script
    Alles anzeigen
  • Hallo,

    Du machst als solches nichts falsch.
    Das ist mit AS nicht möglich, da die Oberfläche in dem Moment keine weiteren Events verarbeiten kann.

    Schaue Dir mal die Klasse NSThread an. Diese kannst Du sicherlich auch via AS ansprechen.
    Somit kannst Du Deine Schleife auslagern ohne die Oberfläche zu blockieren.

    Viele Grüße
  • Hallo,

    erstmal Danke für die schnelle Antwort. :) Um die Klasse "NSThread" zu verwenden, muss ich vermutlich Objective-C einbauen. Wie kann ich denn eine C-Methode von meinem Appdelegate Script aus aufrufen? Meine Versuche mit "call method" waren nicht erfolgreich... ein simples Beispiel dafür wär Klasse ;)

    Viele Grüße