C#Microsoft Interop用户关闭Microsoft应用程序时该怎么办

问题描述

我已经创建了一个Windows From应用程序,该应用程序已连接到sql Server,用户可以在其中更新PPT,然后解析它并将数据写入sql数据库

我将它设置为用户按Ctrl + s(保存)ppt的位置。我的应用程序解析了ppt并自动关闭了ppt。

但是,当用户关闭一个不保存的ppt时,这将破坏基础的rcw或com对象,并且他们使用该应用打开的下一个ppt无法保存并使用Microsoft Interop进行解析,因为它抱怨com对象不存在

Error after user closes ppt and uses Forms application to open and save new one

我已经尝试使用powerpoint的close事件释放com对象,如下所示,但是此错误仍然存​​在。如何重建断开的Com对象/ RCW连接,而不必重新启动表单应用程序。

public class PPTHandler
    {
        private PowerPoint.Application objApp = new PowerPoint.Application();
        private bool q = false;
        private bool closeCheck = false;
        public PowerPoint.Presentation objPres;
        private string _location;

        public PPTHandler(string location)
        {
            objApp = new PowerPoint.Application();
            objApp.Visible = MsoTriState.msoTrue;
            
            _location = location;
            var objPresSet = objApp.Presentations;
            objPres = objPresSet.Open(_location,MsoTriState.msoFalse,MsoTriState.msoTrue);
            
            
            objApp.PresentationCloseFinal += ObjApp_PresentationCloseFinal;


        }

        private void ObjApp_PresentationCloseFinal(PowerPoint.Presentation Pres)
        {
            if (closeCheck)
            {
                Marshal.ReleaseComObject(objPres);
                Marshal.ReleaseComObject(objApp);
                GC.Collect();
                GC.Collect();
                Marshal.FinalReleaseComObject(objApp);
                objApp = new PowerPoint.Application();
            }
            System.Threading.Thread.Sleep(1000);
            
        }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)