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);, но это не принесло желаемого результата.