我有一个托管(使用 AxInterop.ShockwaveFlashObjects.dll 中的 Shockwave Flash 对象)一个 Flash 应用程序的 c# 应用程序。
我可以使用 flash 的“fscommand”将命令从 flash 应用程序发送到我的 c# 应用程序。
现在我需要从 c# 应用程序向 Flash 应用程序发送命令(比如设置 Flash 文本),我可以这样做吗?如何?
1 回答
有几种方法可以实现:
正如 George Profenza 所指出的,使用ExternalInterface是一种实现双向通信的简单实现。它可以来回处理一些原始数据,非常适合在每次调用中涉及少量数据的托管 Flash 通信。但是,对于可以发送和接收多少数据存在大小限制。
如果大小确实很重要,那么 XmlSocket将是另一个允许有状态双向通信的选项。在 C# 端,您可以使用这样的代码片段来创建 XmlSocket 服务器,并让主机应用程序也托管服务器,然后让 Flash 在启动时连接到服务器。没有大小限制,但是您必须将每个调用编码为 XML,因此在两端序列化和反序列化数据会产生一些开销。多年来,我已经在一些独立的 .NET 基础 Winform 应用程序中成功使用了这项技术。
第三种选择是使用 FlashRemoting。它类似于上述选项中使用的策略,但“服务器”将是一个 Flash Remoting 服务器,它能够使用 AMF 与 Flash 进行通信。这种方法的主要优点是您不必编写任何序列化/反序列化器,因为服务器和 Flash 会为您处理这些,并且也没有大小限制,它非常适合您有多种情况的场景具有复杂数据结构的调用。但是,集成服务器需要预付费用。有开源解决方案和闭源解决方案。
第 3 个选项可能不会被探索,因为大多数人会将它用于 Web 应用程序。我个人喜欢第三种选择,尽管我没有将它集成为 Windows 窗体应用程序的第一手经验。我喜欢它,因为它具有将应用程序轻松转换为基于 Web 的应用程序的潜力,并且它还支持复杂的数据结构,而无需花费数据序列化。