暂停程序,直到JSFL文件完成

本文关键字:文件 JSFL 直到 程序 暂停 | 更新日期: 2023-09-27 18:07:53

我试图从c#项目中运行JSFL脚本,其中JSFL脚本打开一个。fla文件,修改n次,并在关闭前导出n个。swf文件。在c#项目中,我通过Process类启动JSFL脚本。我尝试通过myProcess.WaitForExit()命令等待JSFL进程完成,但它不起作用。我的代码的其余部分c#在JSFL进程完成导出它的.swf文件之前执行。是否有任何方法可以抛出一些c#项目可以从JSFL文件或其他解决方案中捕获的东西?

暂停程序,直到JSFL文件完成

一个解决方案(尽管很可能不是最好的解决方案)是让您的c#代码查找正在创建的SWF文件。只有当它们被更新/创建之后,JSFL脚本才算完成,这样您就可以放心地继续使用c#了。如果没有办法知道c#程序需要查找多少SWF文件,您可以让JSFL脚本写入某种类型的日志文件,并让c#程序以一定的间隔读取该日志,查找某种类型的令牌来指示JSFL脚本已经完成了它的任务。

当然,这可能不是最好的方法(我不太了解c#,不知道你看到的是设计还是错误的标志)。但是可能只是运行JSFL/Flash是完全异步的,如果是这样,也许日志文件方法是解决问题的最快途径。

我在另一个调用外部JSFL脚本的应用程序中遇到了同样的问题。

我所做的是在完成后将文件写入目标目录,并在调用应用程序中轮询该文件。文件一出现,我就知道任务已经完成,我就删除临时文件,然后继续。哦,在开始之前,我寻找并删除任何临时文件,这样我就不会得到假阳性。

它不像事件那么好,但你必须利用你所拥有的。

您是否尝试过设置一个自定义侦听器,以便在JSFL完成时执行一个函数?不要忘记,它仍然是基于ECMA的,这是一种过程语言。顺便说一下,JSFL有一个低级别的C API。C LEVEL API

这是绝对可能的,我已经在这里发布了一个关于堆栈溢出的解决方案,包括详细的问题描述和实现它所需的所有c#和JSFL源代码:调用过程。多次启动

总结……首先,等待JSFL脚本进程是无用的,因为你实际上是在调用Flash.exe,它将在JSFL完成后保持打开/运行,所以你将等待一个永远不会发生的进程退出事件。

技巧是在JSFL脚本的末尾使用JSFL函数,该函数执行windows命令行命令,该调用将向您的c#应用程序发出JSLF脚本已经完成的信号。所以基本上你有你的c#应用程序的主实例,但你想修改你的c#应用程序,使第二个实例可以从命令行运行与一个特定的开关。当你的c#应用程序被一个特定的开关(从JSLF文件)调用时,你希望你的程序在你的应用程序的主实例中发出一个等待句柄的信号,然后关闭,而不是正常运行。我使用一个简单的第三方开源库XDMessaging,它促进了这种进程间通信。它允许您在c#应用程序中打开一个命名通道,该通道可以从第二个实例接收命令,向主实例发出JSFL脚本已经完成并且可以安全继续的信号。

但是像这样涉及文件监视器不是最好的解决方案,所以我捕获Flash进程并监视进程标题,并告诉JSFL在完成执行后为Flash窗口呈现一些窗口标题