将Delphi TWebBrowser控件中的Flash Player移动到后台线程?

时间:2010-12-06 16:40:20

标签: multithreading flash delphi adobe twebbrowser

我有一个带有TWebBrowser组件的Delphi 6 Pro程序,它加载了一个嵌入Cool Iris Wall的网页。 Cool Iris墙是一个SWF对象,这意味着在运行时,执行发生在Adobe Flash播放器,我相信的ActiveX或类似对象中。我遇到的问题是,有时当Wall从网上加载图片/视频时,它会在主UI线程的CPU上受到重创。我知道TWebBrowser将其大部分操作转移到后台线程以保持主UI线程的快乐,但Adobe Flash Player正在做的事情发生在主UI线程上并且它导致我的程序非常悲伤。有没有办法将Adobe Flash Player移动到后台线程?

[更新 - 12/7/2010] - 在马拉松探测和调试会议之后,事实证明问题与Cool Iris Wall的Flickr代理有关。您可以通过两种主要方式与Wall进行交互:1)您将特殊的Flickr api协议URL传递给他们并让他们与您联系Flickr,例如“api://www.flickr.com/?search = puppy”加载用Flickr关键字搜索小狗的结果。这种方法的优点是,它们可以为您完成查询Flickr和构建Wall的内容所需的所有工作。 2)您自己构建一个RSS媒体源,其中包含照片流项目数据并将其提供给Wall。

我正在使用技术#1。 #1的问题在于,当他们的服务器无法为您构建Flickr源时(出于任何未知原因),他们的主机SWF会对CPU造成重负,干扰主UI线程的操作。我将整个代码库转换为直接使用Flickr API并使用第二种技术自行创建Feed,问题就消失了。

- roschler

1 个答案:

答案 0 :(得分:0)

您无法控制webbrowser如何管理其线程。如果你不希望webbrowser干扰主线程,那么不要在主线程中运行webbrowser来开始。