重新加载和刷新Windows窗体中的Flash文件

时间:2010-10-10 08:59:19

标签: c# .net axshockwaveflash

使用DOTNET 3.5。我有一个应用程序,显示使用此代码

在表单中加载Flash影片

axShockwaveFlash1 = new AxShockwaveFlashObjects.AxShockwaveFlash()    axShockwaveFlash1.LoadMovie(0,Form1.currentGame);

问题在于,每当我在我们的应用程序中托管的Flash中进行更改并尝试刷新以查看更改时,新的更改都会被“搞砸”。更具体地说,似乎前一个闪存的背景和一些控件仍然存在,“破坏”加载的新闪存。为什么呢?

在加载第二个Flash视频之前使用以下方法没有区别

axShockwaveFlash1.Refresh();  axShockwaveFlash1.Stop();

3 个答案:

答案 0 :(得分:1)

您是否尝试在加载新视频之前加载“空”Flash视频?

e.g。

axShockwaveFlash1.LoadMovie(0,"");

我确信我遇到了类似的问题并以这种方式解决了。

答案 1 :(得分:1)

试试这个。 做一个空白的瑞士法郎。 “Blank.swf”首先加载它,然后重新加载你的游戏。

axShockwaveFlash1.LoadMovie(0,"Blank.swf");
axShockwaveFlash1.Play();
axShockwaveFlash1.LoadMovie(0, Form1.currentGame);
axShockwaveFlash1.Play();

确保为 Blank.swf 提供正确的路径。

答案 2 :(得分:1)

我尝试了其他方法,但对我来说并不适用。以下是我为达到预期效果所做的工作。

private void btnReload_Click(object sender, EventArgs e)
    {
        byte[] fileContent = File.ReadAllBytes(Application.StartupPath + @"\yourflashfile.swf");

        if (fileContent != null && fileContent.Length > 0)
        {
            using (MemoryStream stm = new MemoryStream())
            {
                using (BinaryWriter writer = new BinaryWriter(stm))
                {
                    /* Write length of stream for AxHost.State */
                    writer.Write(8 + fileContent.Length);
                    /* Write Flash magic 'fUfU' */
                    writer.Write(0x55665566);
                    /* Length of swf file */
                    writer.Write(fileContent.Length);
                    writer.Write(fileContent);
                    stm.Seek(0, SeekOrigin.Begin);
                    /* 1 == IPeristStreamInit */
                    //Same as LoadMovie()
                    this.axShockwaveFlash1.OcxState = new AxHost.State(stm, 1, false, null);
                }
            }

            fileContent = null;
            GC.Collect();
        }
    }

我将核心代码复制到某处,但我不记得来源。