zoukankan      html  css  js  c++  java
  • C#利用com操作excel释放进程

    最近利用Microsoft.Office.Interop.Excel.Application读取一个excel后,进程中一直存在excel,在网上找了一阵子,其中有几个解决方案,

    第一个

            System.Runtime.InteropServices.Marshal.ReleaseComObject(sheets);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(range);


            excelApp = null;
            wbclass = null;
            sheets = null;
            worksheet = null;
            range = null;

            GC.Collect();
            GC.WaitForPendingFinalizers();

    释放不彻底,还是有进程存在。

    第二种

        //调用底层函数获取进程标示
        [DllImport("User32.dll")]
        public static extern int GetWindowThreadProcessId(IntPtr hWnd, out int ProcessId);

        private static void KillExcel(Microsoft.Office.Interop.Excel.Application theApp)
        {
            int id = 0;
            IntPtr intptr = new IntPtr(theApp.Hwnd);
            System.Diagnostics.Process p = null;
            try
            {
                GetWindowThreadProcessId(intptr, out id);
                p = System.Diagnostics.Process.GetProcessById(id);

                if (p != null)
                {
                    p.Kill();
                    p.Dispose();
                }
            }
            catch (Exception ex)
            {
                
            }
        }

    这个方法比较好,我试过了可以关闭掉进程。

  • 相关阅读:
    变形方块
    Vim编辑器设置字体高亮显示
    从命令行终端获取数值作为函数参数
    Vi编辑器的使用技巧
    iOS开发常用shell命令
    include使用技巧
    交换2个整型变量的值
    C语言位运算实现函数体
    React Native 之文件内数据操作(var、let、const、static、Props、State、this)
    React Native 城市选择(四)获取城市名称
  • 原文地址:https://www.cnblogs.com/x4646/p/2975844.html
Copyright © 2011-2022 走看看