3

使用 DOTNET 3.5 。我有一个应用程序,它显示使用此代码以表单形式加载 Flash 电影

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

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

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

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

4

3 回答 3

2

我尝试了其他方法,它对我不起作用。这是我为达到预期结果所做的工作。

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();
        }
    }

我在 SO 的某个地方复制了核心代码,但我不记得源代码了。

于 2017-01-01T20:03:17.527 回答
1

尝试这个。制作一个空白的 swf。“Blank.swf”先加载它,然后重新加载你的游戏。

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

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

于 2012-10-10T06:02:21.157 回答
1

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

例如

axShockwaveFlash1.LoadMovie(0,"");

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

于 2010-10-10T19:53:17.110 回答