我正在尝试从C#项目中运行JSFL脚本,其中JSFL脚本打开一个.fla文件,修改它n次,并在关闭之前导出n .swf文件。从C#项目开始,我通过Process类启动JSFL脚本。我尝试等待JSFL过程完成myProcess.WaitForExit()命令,但它不起作用。我的代码C#的其余部分在JSFL流程完成导出其.swf文件之前执行。有什么方法可以抛出C#项目可以从JSFL文件或其他解决方案中捕获的内容吗?
答案 0 :(得分:2)
一个解决方案(尽管很可能不是最好的解决方案)将是您的C#代码,以查找正在创建的SWF文件。只有在更新/创建它们之后,JSFL脚本才会完成,因此您知道C#继续运行是安全的。如果无法知道C#程序需要查找多少个SWF文件,您可以改为让JSFL脚本写入某种日志文件,并让C#程序在一段时间内读取该日志,某种令牌表示JSFL脚本已经完成了它的任务。
当然,这可能远非最好的方法(而且我不太清楚C#是否足以知道您所看到的是设计还是出现问题的迹象)。但可能只是运行JSFL / Flash是完全异步的,如果是这样,也许日志文件方法是解决问题的最快途径。
答案 1 :(得分:2)
我和另一个调用外部JSFL脚本的应用程序有同样的问题。
我所做的是在完成目标目录后写入文件,并在调用应用程序中查询该文件。一旦文件出现,我就知道任务已经完成,我删除了临时文件,然后继续。哦 - 在开始之前我会查找并删除任何临时文件,这样我就不会得到误报。
它不像事件那么好,但你必须使用你所拥有的东西。
答案 2 :(得分:2)
您是否尝试设置一个自定义侦听器,它将在JSFL完成时执行一个函数。不要忘记它仍然基于ECMA,这是一种程序语言。 顺便说一句,JSFL有一个LOW-LEVEL C API。 C LEVEL API
答案 3 :(得分:0)
这绝对是可能的,我已经在堆栈溢出中发布了一个解决方案,其中包含详细的问题描述以及实现它所需的所有C#和JSFL源代码:Automating publishing of FLA files; calling Process.Start multiple times
总结一下......首先,等待JSFL脚本进程是没用的,因为你实际上正在调用Flash.exe,它将在JSFL完成后保持打开/运行,所以你要等待一个进程退出事件永远不会发生。
诀窍是在JSFL脚本的末尾使用一个JSFL函数来执行一个Windows命令行命令,这个调用将向你的C#应用程序发出JSLF脚本已经完成的信号。所以基本上你将拥有你的C#应用程序的主要实例,但是你想要修改你的C#应用程序,以便可以从具有特定交换机的命令行运行第二个实例。当您使用特定交换机(来自JSLF文件)调用C#app时,您希望程序只是在应用程序的主实例中发出等待句柄然后关闭,而不是正常运行。我使用一个简单的第三方开源库,称为XDMessaging,它促进了这种进程间通信。它允许您在C#app中打开一个命名通道,它可以从第二个实例接收命令,通知JSFL脚本已完成的主实例,并且可以继续安全。
答案 4 :(得分:-2)
但是像这样涉及文件观察者并不是最好的解决方案,所以我抓住Flash进程并继续监视进程标题并告诉JSFL在完成执行后为flash窗口渲染一些窗口标题。