Задержка программы до конца файла JSFL - PullRequest
1 голос
/ 07 сентября 2011

Я пытаюсь запустить сценарий JSFL из проекта C #, где сценарий JSFL открывает файл .fla, модифицирует его n раз и экспортирует n файлов .swf перед закрытием. Из проекта C # я запускаю сценарий JSFL через класс Process. Я пытаюсь дождаться завершения процесса JSFL с помощью команды myProcess.WaitForExit (), но это не работает. Остальная часть моего кода C # выполняется до того, как процесс JSFL завершит экспорт своих файлов .swf. Есть ли способ, которым я могу выбросить что-то, что проект C # может поймать из файла JSFL или другого решения?

Ответы [ 5 ]

2 голосов
/ 10 июля 2012

Вы пытались установить пользовательский прослушиватель, который будет выполнять функцию после завершения JSFL. Не забывайте, что он все еще основан на ECMA, который является процедурным языком. Кстати, у JSFL есть API низкого уровня C. C УРОВЕНЬ API

2 голосов
/ 21 октября 2011

У меня такая же проблема с другим приложением, которое вызывает внешний JSFL-скрипт.

Что я делаю, так это записываю файл, когда он закончен, в целевой каталог, и в вызывающем приложении опрашиваю этот файл. Как только файл появляется, я знаю, что задача выполнена, и я удаляю временный файл, и продолжаю. Да, и перед запуском я ищу и удаляю все временные файлы, чтобы не получить ложное срабатывание.

Это не так хорошо, как события, но вы должны работать с тем, что у вас есть.

2 голосов
/ 07 сентября 2011

Одним из решений (хотя, скорее всего, не самым лучшим) будет ваш код C # для поиска создаваемых SWF-файлов. Только после того, как они будут обновлены / созданы, сценарий JSFL будет завершен, так что вы знаете, что для вашего C # будет безопасно двигаться дальше. В случае, если нет способа узнать, сколько SWF-файлов нужно искать программе на C #, вы можете вместо этого позволить сценарию JSFL записывать в какой-либо файл журнала и заставить программу C # читать этот журнал с интервалом, просматривая для какого-то токена, указывающего, что сценарий JSFL выполнил свою задачу.

Конечно, это может быть далеко не лучший метод (и я недостаточно хорошо знаю C #, чтобы понять, является ли то, что вы видите, намеренно или признаком того, что что-то не так). Но может случиться так, что запуск JSFL / Flash будет полностью асинхронным, и если это так, то, возможно, подход с использованием файла журнала - это самый быстрый путь к решению проблемы.

0 голосов
/ 24 июля 2014

Это абсолютно возможно, и я уже разместил здесь решение по переполнению стека, вместе с подробным описанием проблемы и всем исходным кодом C # и JSFL, необходимым для его реализации: Автоматическая публикация FLA-файлов;вызывая Process.Start несколько раз

Подводя итог ... Прежде всего, ожидание процесса сценария JSFL бесполезно, поскольку вы фактически вызываете Flash.exe, который останется открытым / запущенным послеJSFL завершается, поэтому вы будете ожидать события завершения процесса, которое никогда не произойдет.

Хитрость заключается в том, чтобы использовать функцию JSFL в конце сценария JSFL, который выполняет команду командной строки Windows, иэто тот вызов, который сообщит вашему приложению C #, что JSLF-скрипт завершен.Таким образом, в основном у вас будет основной экземпляр вашего приложения C #, но вы хотите изменить свое приложение C #, чтобы второй экземпляр можно было запустить из командной строки с определенным переключателем.Когда ваше C # приложение вызывается с определенным переключателем (из файла JSLF), тогда вместо того, чтобы нормально работать, вы хотите, чтобы ваша программа просто сигнализировала о дескрипторе ожидания в главном экземпляре вашего приложения и затем закрывалась.Я использую простую стороннюю библиотеку с открытым исходным кодом под названием XDMessaging, которая облегчает такое межпроцессное взаимодействие.Это позволяет вам открыть именованный канал в вашем приложении C #, которое может получить команду от 2-го экземпляра, сигнализирующую основному экземпляру, что сценарий JSFL завершен и его можно продолжить.

0 голосов
/ 22 мая 2012

Но такое использование средства просмотра файлов не является лучшим решением, поэтому я отслеживаю процесс Flash и слежу за заголовком процесса и сообщаю JSFL визуализировать заголовок некоторого окна для окна флэш-памяти после завершения выполнения.

...