1

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

4

5 回答 5

2

我对另一个调用外部 JSFL 脚本的应用程序有同样的问题。

我所做的是将完成后的文件写入目标目录,然后在调用应用程序中轮询该文件。文件一出现,我就知道任务已经完成,我删除了临时文件,然后继续。哦-在开始之前,我会查找并删除任何临时文件,以免误报。

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

于 2011-10-20T21:57:30.520 回答
2

您是否尝试过设置一个自定义侦听器,该侦听器将在 JSFL 完成时执行一个函数。不要忘记它仍然基于 ECMA,它是一种程序语言。顺便说一句,JSFL 有一个 LOW-LEVEL C API。 C 级 API

于 2012-07-10T11:39:28.847 回答
2

一种解决方案(尽管很可能不是最好的)是让您的 C# 代码查找正在创建的 SWF 文件。只有在更新/创建它们之后,JSFL 脚本才会完成,因此您知道继续使用 C# 将是安全的。如果无法知道 C# 程序需要查找多少 SWF 文件,您可以改为让 JSFL 脚本写入某种日志文件,并让 C# 程序每隔一段时间读取该日志,查看某种标记来表明 JSFL 脚本已经完成了它的任务。

诚然,这可能远非最佳方法(而且我对 C# 的了解还不够,无法知道您所看到的内容是设计使然还是有问题的迹象)。但可能只是运行 JSFL/Flash 是完全异步的,如果是这样,日志文件方法可能是解决问题的最快途径。

于 2011-09-06T21:37:46.090 回答
0

这是绝对可能的,我已经在这里发布了关于堆栈溢出的解决方案,并附有详细的问题描述以及实现它所需的所有 C# 和 JSFL 源代码:自动发布 FLA 文件;多次调用 Process.Start

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

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

于 2014-07-24T15:01:52.340 回答
-2

但是像这样涉及文件观察器并不是最好的解决方案,所以我捕获 Flash 进程并密切关注进程标题,并告诉 JSFL 在完成执行后为 Flash 窗口渲染一些窗口标题。

于 2012-05-22T06:46:48.463 回答