Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的excel应用程序没有从VS 2015的c#windows应用程序内存中释放_C#_Excel - Fatal编程技术网

我的excel应用程序没有从VS 2015的c#windows应用程序内存中释放

我的excel应用程序没有从VS 2015的c#windows应用程序内存中释放,c#,excel,C#,Excel,一切正常,但excel应用程序并没有最终从内存中释放 enter Excel.Application xlApp = new Excel.Application(); Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; xlApp = new Excel.Application(); xlWorkBook = xlApp.Workbooks.Open(sFile); xlWorkSheet = xlWorkBook.Worksheets

一切正常,但excel应用程序并没有最终从内存中释放

enter Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Open(sFile);
xlWorkSheet = xlWorkBook.Worksheets["Sheet1"];
xlWorkSheet.Cells[9, 5].value = txtqty.Text; 
xlWorkBook.PrintOutEx();
xlWorkBook.Close(false,null,null);
xlApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);

您发布的代码似乎没有问题。我已经尝试过多次,但在应用程序关闭后,它无法在后台运行进程

(可能的)解决办法 将代码放在backgroundWorker实例中,并异步调用后台worker实例。这样执行辅助操作不会阻止代码的完成

首先将backgroundWorker实例(工具箱>组件>后台工作程序)添加到表单中。其次,将以下代码添加到表单类中:

        public Form1()
        {
            InitializeComponent();

            backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            Excel.Application xlApp = new Excel.Application();
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Open(@"D:/Projects/Training/MemoryExcelInt/MemoryExcelInt/Example.xlsx");
            xlWorkSheet = xlWorkBook.Worksheets["Sheet1"];
            xlWorkSheet.Cells[9, 5].value = "ExampleValue";
            xlWorkBook.PrintOutEx();
            xlWorkBook.Close(false, null, null);
            xlApp.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheet);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync();
        }

您发布的代码似乎没有问题。我已经尝试过多次,但在应用程序关闭后,它无法在后台运行进程

(可能的)解决办法 将代码放在backgroundWorker实例中,并异步调用后台worker实例。这样执行辅助操作不会阻止代码的完成

首先将backgroundWorker实例(工具箱>组件>后台工作程序)添加到表单中。其次,将以下代码添加到表单类中:

        public Form1()
        {
            InitializeComponent();

            backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            Excel.Application xlApp = new Excel.Application();
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Open(@"D:/Projects/Training/MemoryExcelInt/MemoryExcelInt/Example.xlsx");
            xlWorkSheet = xlWorkBook.Worksheets["Sheet1"];
            xlWorkSheet.Cells[9, 5].value = "ExampleValue";
            xlWorkBook.PrintOutEx();
            xlWorkBook.Close(false, null, null);
            xlApp.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheet);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync();
        }

你怎么知道它没有释放内存?运行此代码后,是否在进程列表中看到EXCEL.EXE?是的,它显示在任务管理器中。您知道它不会释放内存吗?运行此代码后,是否在进程列表中看到EXCEL.EXE?是的,它在任务管理器中显示。关闭应用程序后,它将释放EXCEL对象。但是,如果应用程序打开,我移动到另一个窗体,则EXCEL本身就在内存中。它将创造problem@SantoshKotwani谢谢你提供更多的信息。我添加了一个硬解决方案。关闭应用程序后,它将释放excel对象,但如果打开应用程序,我移动到另一个表单,则excel本身就在内存中。它将创造problem@SantoshKotwani谢谢你提供更多的信息。我添加了一个困难的解决方案。