Перезагрузка и обновление флэш-файлов в форме Windows - PullRequest
3 голосов
/ 10 октября 2010

Использование DOTNET 3.5. У меня есть приложение, которое показывает загрузку флэш-фильма в форме, используя этот код

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

Проблема в том, что всякий раз, когда я делаю изменения во флэш-памяти, размещенной в нашем приложении, и пытаюсь обновить их, чтобы увидеть изменения, новые изменения «запутываются». точнее, кажется, что фон и некоторые элементы управления предыдущей вспышки все еще остаются, «портя» новую загруженную вспышку. почему?

Использование следующих методов перед загрузкой второго флэш-видео не имеет значения

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

Ответы [ 3 ]

1 голос
/ 10 октября 2012

Попробуй это.Сделайте пустой SWF.Сначала загрузите «Blank.swf», а затем заново загрузите игру.

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

Убедитесь, что вы указали правильный путь для Blank.swf .

1 голос
/ 01 января 2017

Я пробовал другие методы, у меня это не работает. Вот что я сделал для достижения желаемого результата.

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, но я не помню источник.

1 голос
/ 10 октября 2010

Вы пытались загрузить «пустое» флэш-видео перед загрузкой нового видео?

например

axShockwaveFlash1.LoadMovie(0,"");

Я уверен, что столкнулся с подобной проблемой и решил ее таким образом.

...