关闭表单时,AxAcroPDF控件窗口窗体会挂起

时间:2016-12-07 16:09:13

标签: c# winforms pdf 3d controls

我正在处理用C#编写的Windows窗体.NET应用程序,它需要显示包含所有相关功能的3D pdf(旋转对象,更换灯光等)。我正在使用AxAcroPDF COM控件,它运行顺畅。问题是,当我尝试关闭放置控件的表单时,有时它在处理控件时没有明显原因而挂起几秒钟。我在测试期间加载的3D文件并不特别重。独立的adobe reader中的相同文件打开和关闭,没有特别的延迟。 我在windows窗体关闭事件中使用以下代码:

lambda(3);

有趣的是,如果文件刚刚显示,表单会正常关闭,但是当旋转3D文件中的对象时,它会在关闭期间挂起。当它挂起时,会显示手表的图标(在独立的Adobe PDF中显示相同的图标)。停机时间在15-20秒之间。 我试图在webbrowser控件中显示该文件,但我得到了类似的结果。这个问题的原因是什么? 我试图寻找替代的稳定控制,但我没有找到3D支持。

3 个答案:

答案 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边界会导致操作变慢?