簡體   English   中英

我的 excel 應用程序未從 c# 應用程序中的 memory 釋放

[英]my excel application is not releasing from memory in c# windows application in VS 2015

一切正常,但 excel 應用程序最后沒有從 memory 中釋放。

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 實例中並異步調用后台工作者實例。 這樣執行輔助操作不會阻止代碼的完成。

首先在表單中添加一個 backgroundWorker 實例(工具箱 > 組件 > 后台工作者)。 其次,將以下代碼添加到您的表單 class 中:

        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();
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM