Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 暂停程序直到JSFL文件完成_C#_Actionscript 3_Synchronization_Jsfl - Fatal编程技术网

C# 暂停程序直到JSFL文件完成

C# 暂停程序直到JSFL文件完成,c#,actionscript-3,synchronization,jsfl,C#,Actionscript 3,Synchronization,Jsfl,我试图在一个C#项目中运行一个JSFL脚本,其中JSFL脚本打开一个.fla文件,修改它n次,并在关闭之前导出n个.swf文件。在C#项目中,我通过Process类启动JSFL脚本。我试图通过myProcess.WaitForExit()命令等待JSFL进程完成,但它不起作用。我的代码C#的其余部分在JSFL进程完成导出其.swf文件之前执行。有没有什么方法可以让C#项目从JSFL文件或其他解决方案中捕获到一些东西?一种解决方案(尽管很可能不是最好的)是让C#代码查找正在创建的SWF文件。只有在

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

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

诚然,这可能远不是最好的方法(我对C#的了解还不足以知道你看到的是故意的还是有什么不对劲的迹象)。但是,运行JSFL/Flash可能是完全异步的,如果是这样,那么日志文件方法可能是解决问题的最快途径。

一种解决方案(虽然很可能不是最好的)是让您的C代码查找正在创建的SWF文件。只有在它们被更新/创建之后,JSFL脚本才会完成,因此您知道,您的C#可以安全地继续前进。如果无法知道C#程序需要查找多少SWF文件,您可以让JSFL脚本写入某种类型的日志文件,让C#程序每隔一段时间读取该日志,寻找某种标记来指示JSFL脚本已完成其任务


诚然,这可能远不是最好的方法(我对C#的了解还不足以知道你看到的是故意的还是有什么不对劲的迹象)。但可能只是运行JSFL/Flash是完全异步的,如果是这样,那么日志文件方法可能是解决问题的最快途径。

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

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


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

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

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


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

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

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

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

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

这是绝对可能的,我已经在这里发布了一个关于堆栈溢出的解决方案,包括详细的问题描述以及实现它所需的所有C#和JSFL源代码:

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


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

这是绝对可能的,我已经在这里发布了一个关于堆栈溢出的解决方案,完成详细的问题描述以及实现该问题所需的所有C#和JSFL源代码:

总而言之。。。首先,等待JSFL脚本进程是没有用的,因为实际上您正在调用Flash.exe,它在JSFL完成后将保持打开/运行