C# プロジェクト内から JSFL スクリプトを実行しようとしています。JSFL スクリプトは .fla ファイルを開き、n 回変更し、閉じる前に n 個の .swf ファイルをエクスポートします。C# プロジェクトから、Process クラスを介して JSFL スクリプトを起動しています。myProcess.WaitForExit() コマンドを使用して JSFL プロセスが完了するまで待機しようとしましたが、うまくいきません。残りのコード C# は、JSFL プロセスが .swf ファイルのエクスポートを完了する前に実行されます。C# プロジェクトが JSFL ファイルまたはその他のソリューションからキャッチできるものをスローする方法はありますか?
5 に答える
1つの解決策(おそらく最良の解決策ではありませんが)は、C#コードで作成中のSWFファイルを探すことです。それらが更新/作成されて初めてJSFLスクリプトが終了するため、C#を安全に先に進めることができます。C#プログラムが検索する必要のあるSWFファイルの数を知る方法がない場合は、代わりにJSFLスクリプトに何らかのログファイルを書き込ませ、C#プログラムにそのログを一定間隔で読み取らせることができます。 JSFLスクリプトがタスクを完了したことを示すためのある種のトークン。
確かに、これは最善の方法とはほど遠いかもしれません(そして、あなたが見ているものが設計によるものなのか、何かが間違っている兆候なのかを知るのに十分なC#を知りません)。ただし、JSFL / Flashの実行が完全に非同期である場合もあります。その場合は、ログファイルアプローチが問題を解決するための最速のパスである可能性があります。
JSFL が完了したときに関数を実行するカスタム リスナーを設定しようとしましたか。手続き型言語である ECMA に基づいていることを忘れないでください。ところで、JSFL には LOW-LEVEL C API があります。 C レベル API
これは絶対に可能です。スタック オーバーフローに関する解決策をここに投稿しました。詳細な問題の説明と、それを実装するために必要なすべての C# および JSFL ソース コードを完備しています。Process.Start を複数回呼び出す
要約すると...まず第一に、JSFL スクリプト プロセスを待機することは役に立ちません。実際には Flash.exe を呼び出しているためです。Flash.exe は、JSFL の完了後も開いている/実行されたままになるため、プロセス終了イベントを待機することになります。それは決して起こりません。
トリックは、Windows コマンド ライン コマンドを実行する JSFL スクリプトの最後で JSFL 関数を使用することです。これは、JSLF スクリプトが完了したことを C# アプリに通知する呼び出しです。したがって、基本的には C# アプリのメイン インスタンスを作成しますが、特定のスイッチを使用してコマンド ラインから 2 番目のインスタンスを実行できるように C# アプリを変更する必要があります。C# アプリが特定のスイッチ (JSLF ファイルから) で呼び出された場合、通常どおり実行する代わりに、プログラムがアプリケーションのメイン インスタンスで単に待機ハンドルを通知してから閉じるようにする必要があります。このようなプロセス間通信を容易にする XDMessaging と呼ばれるサードパーティ製のシンプルなオープンソース ライブラリを使用しています。これにより、C# アプリで名前付きチャネルを開くことができ、2 番目のインスタンスからコマンドを受け取ることができます。
しかし、このようにファイル ウォッチャーを使用するのは最善の解決策ではないため、Flash プロセスをキャッチしてプロセス タイトルを監視し、実行終了後に JSFL にフラッシュ ウィンドウのウィンドウ タイトルをレンダリングするように指示します。