使用DOTNET 3.5。我有一个应用程序,显示使用此代码
在表单中加载Flash影片axShockwaveFlash1 = new AxShockwaveFlashObjects.AxShockwaveFlash() axShockwaveFlash1.LoadMovie(0,Form1.currentGame);
问题在于,每当我在我们的应用程序中托管的Flash中进行更改并尝试刷新以查看更改时,新的更改都会被“搞砸”。更具体地说,似乎前一个闪存的背景和一些控件仍然存在,“破坏”加载的新闪存。为什么呢?
在加载第二个Flash视频之前使用以下方法没有区别
axShockwaveFlash1.Refresh(); axShockwaveFlash1.Stop();
答案 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();
}
}
我将核心代码复制到某处,但我不记得来源。