我正在处理用C#编写的Windows窗体.NET应用程序,它需要显示包含所有相关功能的3D pdf(旋转对象,更换灯光等)。我正在使用AxAcroPDF COM控件,它运行顺畅。问题是,当我尝试关闭放置控件的表单时,有时它在处理控件时没有明显原因而挂起几秒钟。我在测试期间加载的3D文件并不特别重。独立的adobe reader中的相同文件打开和关闭,没有特别的延迟。 我在windows窗体关闭事件中使用以下代码:
lambda(3);
有趣的是,如果文件刚刚显示,表单会正常关闭,但是当旋转3D文件中的对象时,它会在关闭期间挂起。当它挂起时,会显示手表的图标(在独立的Adobe PDF中显示相同的图标)。停机时间在15-20秒之间。 我试图在webbrowser控件中显示该文件,但我得到了类似的结果。这个问题的原因是什么? 我试图寻找替代的稳定控制,但我没有找到3D支持。
答案 0 :(得分:2)
在FormClosing
事件处理程序中添加2行:
this.Controls.Remove(yourAxAcroPDFControl);
yourAxAcroPDFControl = null;
在Adobe进行更新之前,请将其视为临时解决方案。我检查了Adobe SDK样本,这些也导致了问题,尽管是由Adobe自己编写的,所以我们可以期待他们认为这是一个问题。
答案 1 :(得分:1)
这是我修复它的方式 - 不是很好但是它有效!
protected override void WndProc(ref System.Windows.Forms.Message m)
{
// WM_CLOSE = 16
if (16 == m.Msg)
{
//closing
axAcroPDF1.LoadFile("UNLOAD_FILE_FOR_FUDGE");
// we need to wait a bit
System.Threading.Thread.Sleep(500);
}
base.WndProc(ref m);
}
答案 2 :(得分:-1)
问题的解决方案不是调用Dispose(),而是让操作系统处理这个问题。我试过,它完美无缺。为什么?也许.NET调用越过COM边界会导致操作变慢?