私はCocoaとAppleScriptを初めて使用しています。最近、私は何度もCocoa-AppleScriptの "do shell script"コマンドを使って何かをしたいと思っています。同時にいくつかの回を示すためにプログレスバーを同時に表示します。これは、プログレスバーを表示し、進捗状況を示しますCocoa-Applescriptで非同期に "do shell script"ですか?
property progressBar: missing value
on applicationWillFinishLaunching_(aNotification)
repeat with i from 1 to 8
set progressBar's doublevalue to i
do shell script "sleep 1"
delay 1
end repeat
end applicationWillFinishLaunching_
:
私のコードは次のようになります。ただし、プログレスバーを含むウィンドウは、繰り返しが終了するまで非アクティブになります。これは、Cocoa-AppleScriptアプリケーションにはスレッドが1つしかないため、「シェルスクリプトを実行する」コマンドを実行しているときにGUIが他のイベントを処理できないためだと思います。シェルスクリプトをバックグラウンドで "&"のようにバックグラウンドで実行しようとしましたが、ハングしたように振る舞い、多くの時間を消費します。
「シェルスクリプトを実行する」コマンドをバックグラウンドで実行することもできますが、進行状況バーの更新が完了したら通知する必要がありますが、その達成方法はわかりません。
私の質問は、「シェルスクリプトを実行する」という方法で非同期的に何かを行い、ジョブが終了したらCocoa-AppleScriptで通知する方法ですか?
(私はその「遅延1」の行を削除する場合ちなみに、プログレスバーでも誰もがその理由を知っているん、更新されていないのだろうか?)
あなたはAppleScriptでこの種のことをしようとするときに問題になることがあります単一スレッドの問題については正しいです。あなたが望むことをすることができるかもしれない "ラッパー"アプリケーション( "Platypus"(http://www.sveinbjorn.org/platypus)と呼ばれる)があります。オプション。 –
@ l'L'l私はこのアプリを使用しようとします。ありがとうございました! –