zoukankan      html  css  js  c++  java
  • Silverlight 操作Excel 中的进程资源释放问题

    在Silverlight中使用COM组件操作Excel,大概需求是在Silverlight应用程序中初始化Excel表格的相关基本信息,然后打开Excel。用户在Excel中输入相关数据,最后在用户点击保存时,把特定一列的数据返回到Silverlight应用程序界面。

    dynamic _excel = AutomationFactory.CreateObject("Excel.Application");

    问题在于,Excel的关闭是用户自行决定的,不能在用户保存成功后强制关闭......所以在下面的事件中不能做强制销进程。

     _excel.WorkbookAfterSave += new AppEvents_WorkbookAfterSaveEventHandler(ExcelApp_WorkbookAfterSave);

    还好,有另外一个事件:

    _excel.WorkbookBeforeClose += new AppEvents_WorkbookBeforeCloseEventHandler(ExcelApp_WorkbookBeforeClose);

    因为这是在关闭前的,用户也有可能在点击关闭按钮时没有保存,弹出确认框的时候,点了取消……所以不能 _excel.Workbooks.Close()

    注:((IDisposable)_excel).Dispose() 这句最重要了,如果没这个,EXcel.EXE 进程会一直在

         /// <summary>
            /// 关闭前
            /// </summary>
            private void ExcelApp_WorkbookBeforeClose(dynamic Wb, ref bool Cancel)
            {
               
                if (_excel != null)
                {
                   // _excel.Workbooks.Close();//不能用这句,否则_excel已经为null了
                    _excel.Quit();
                    ((IDisposable)_excel).Dispose();
                    _excel = null;
                    GC.Collect();  
                }
            }

    OK~这样,不管是点击保存然后关闭,还是不保存就关闭,当Excel关闭时,相应的Excel.EXE进程就会自动销毁 :(

    补充一些:

    AppEvents_WorkbookBeforeCloseEventHandler、AppEvents_WorkbookAfterSaveEventHandler是参照MSDN写的委托变量
     delegate void AppEvents_WorkbookBeforeCloseEventHandler([In] dynamic Wb, [In, Out] ref bool Cancel);
     //delegate void AppEvents_WorkbookBeforeSaveEventHandler(dynamic Wb, bool SaveAsUI, ref bool Cancel);
     delegate void AppEvents_WorkbookAfterSaveEventHandler(dynamic Wb, bool Success);
    作者:Ivan
    个人网站:http://www.IvanBy.com
  • 相关阅读:
    hdu 1251 字典树模板题 ---多串 查找单词出现次数
    一个极其简洁的Python网页抓取程序,自己主动从雅虎財经抓取股票数据
    JSONObject与JSONArray的使用
    关于DPM(Deformable Part Model)算法中模型结构的解释
    fullcalendar日历控件知识点集合
    android--自己定义ProgressDialog显示位置(其他Dialog子类都能够设置)
    最简单的Java框架
    java final keyword
    IBinder对象在进程间传递的形式(一)
    windows的定时任务设置
  • 原文地址:https://www.cnblogs.com/oneivan/p/2780039.html
Copyright © 2011-2022 走看看