Excel.application.Quit() не снимает процесс

Нашел в сети такой момент, что не рекомендуется использовать две точки при работе с Excel.

static void OpenExcelComponents(string pathToList, out string[,] ListKeyComponents)
    {
        Excel.Application xlApp = new Excel.Application();
        //xlApp.DisplayAlerts = true;
        Excel.Workbooks xlWbks = xlApp.Workbooks;
        Excel.Workbook xlWbk = xlWbks.Open(pathToList, ReadOnly: false);
        //открываем 1й лист - Хроматограммы
        Excel.Worksheet xlWrkSht = xlWbk.Sheets[1];
        //Excel.Sheets xlShts = xlWbk.Sheets;
        //Excel.Worksheet xlWrkSht = xlShts[1];
        int startId = 1;
        int sizeOfMass = -1;

        //определяем сколько строк используется для того, чтобы создать массив
        while (true)
        {
            if (xlWrkSht.Cells[startId, 1].Value != null && xlWrkSht.Cells[startId, 2].Value != null)
            {
                startId++;
            }
            else
                break;
        }

        sizeOfMass = startId - 1;
        ListKeyComponents = new string[sizeOfMass, 2];
        for (int i = 1; i <= ListKeyComponents.GetLength(0); i++)
        {
            try
            {
                ListKeyComponents[i - 1, 0] = xlWrkSht.Cells[i, 1].Value.ToString();
                ListKeyComponents[i - 1, 1] = xlWrkSht.Cells[i, 2].Value;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                xlWbk.Close(true, Type.Missing, Type.Missing);
                xlApp.Quit();
            }
        }
        
        //test
        //Console.WriteLine(ListKeyComponents.GetLength(0));
        /*for (int i = 1; i <= ListKeyComponents.GetLength(0); i++)
        {
            Console.WriteLine(ListKeyComponents[i - 1, 1]);
        }*/
        //Закрываем документ и выходим из приложения
        // xlWbk.Close(true, Type.Missing, Type.Missing);

        //xlWrkSht.
        xlWbk.Close();

        xlApp.Quit();
        Marshal.FinalReleaseComObject(xlApp);
        Marshal.FinalReleaseComObject(xlWbk);
        Marshal.FinalReleaseComObject(xlWbks);
    }

Я сократил код до такого вида:

static void OpenExcelComponents(string pathToList, out string[,] ListKeyComponents)
    {
        Excel.Application xlApp = new Excel.Application();
        //xlApp.DisplayAlerts = true;
        Excel.Workbooks xlWbks = xlApp.Workbooks;
        Excel.Workbook xlWbk = xlWbks.Open(pathToList, ReadOnly: false);
        //открываем 1й лист - Хроматограммы
        xlWbk.Close();
        xlWbks.Close();
        xlApp.Quit();

Но даже в таком виде у меня не снимается процесс и в диспетчере задач накапливаются файл дескрипторы при каждом запуске приложения. Как предложено на формумах я разбил на разные строки длинные команды и присвоил переменным com-объекты. В чём может быть проблема? В какую сторону копать? Пробовал применить конструкцию Marshal.FinalReleaseComObject(xlWbks);, но это не принесло желаемого результата.


Ответы (0 шт):