мое приложение excel не выпускается из памяти в приложении c# windows в VS 2015 - PullRequest
1 голос
/ 09 мая 2020

Все работает нормально, но приложение 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);

1 Ответ

0 голосов
/ 09 мая 2020

Кажется, в опубликованном вами коде нет ничего плохого. Я пробовал это несколько раз, и после закрытия приложения процесс не запускается в фоновом режиме.

(Возможное) Решение

Поместите свой код в экземпляр backgroundWorker и асинхронно вызывать экземпляр фонового рабочего. Таким образом, выполнение дополнительных действий не будет препятствовать завершению вашего кода.

Сначала добавьте в форму экземпляр 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();
        }
...