Witam
Mam pewien problem. Tworzę w programie raport zapisując go do xls. Następnie po otwarciu excela poleceniem
Process.Start("excel");
i zamknięciu excela proces excel.exe zostaje w pamięci. Wykomentowałem kod tworzenia pliku xls i odpaliłem excela i zamknął się więc wnioskuje że w moim kodzie jest coś nie tak (skopiowany z internetu). Poniżej go podaje.
void Button3Click(object sender, EventArgs e)
{
if(textBox1.Text=="")
return;
Excel.Application xlApp ;
Excel.Workbook xlWorkBook ;
Excel.Worksheet xlWorkSheet ;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
string[] kolumny = textBox1.Text.Split(new char[] {'\t','\n','\r'},StringSplitOptions.RemoveEmptyEntries);
int j=1;
for(int i=0;i
{
xlWorkSheet.Cells[j, 1] = kolumny[i];
xlWorkSheet.Cells[j, 2] = kolumny[i+1];
if(i>2)
if(int.Parse(kolumny[i+1]) < 15)
xlWorkSheet.get_Range("b"+j.ToString(),"b"+j.ToString()).Interior.Color = Color.Red;
j++;
if(i==2)
{
xlWorkSheet.Cells[j, 1] = "Product";
xlWorkSheet.Cells[j, 2] = "Panels";
j++;
}
}
xlWorkSheet.get_Range("a1", "b2").Font.Bold = true;
xlWorkSheet.get_Range("a1", "b2").Font.Italic = true;
xlWorkSheet.get_Range("a1", "b10000").Columns.AutoFit();
xlWorkSheet.get_Range("a3", "b3").AutoFilter(1, Type.Missing, Excel.XlAutoFilterOperator.xlAnd, Type.Missing, true);
string file_name="C:\\" +DateTime.Now.ToString().Replace('/','_').Replace(' ', '_').Replace(':','_')+".xls";
xlWorkBook.SaveAs(file_name, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
Process.Start("excel");
//MessageBox.Show("Excel file created: " + file_name);
}
Teraz jeszcze sprawdziłem coś, excel.exe powstaje po utworzeniu obiektu xlApp co raczej jest normalne. Jednak czasami podczas testowania programu zamykam aplikację nie przez krzyżyk tylko przez przycisk STOP w VS czy Sharp/Mono Developie i wtedy proces zostaje w pamięci. Moje pytanie, jak zwolnić pamięć i usunąć proces z pamięci po utworzeniu pliku xls?