Excel Object korrekt schliessen

08/01/2008 - 16:38 von Michael Haberfellner | Report spam
hi leute,

mich plagt wiedermal ein excel-problem. ich öffne ein workbook mit
passwort - ist das passwort falsch, schließe ich es gleich wieder (dank
hier nochmals an FRANK). ich geb auch alles mit marshal.release... frei.
der excel-prozess bleibt aber im taskmanager solange bis ich meine
applikation beende. weiß jemand warum? hier mein hoffentlich sauberer
code, der hinter dem button liegt...

private void btnViewXLS_Click(object sender, EventArgs e)
{
//excel objects
Excel.Application locXLSapp = null;
Excel._Workbook locXLSwbook = null;
const long locXLSerr_wrongpwd = -0x7FF5FC14;

//define missing-parameter for excel-calls
object locEmpty = Type.Missing;

//start and connect to excel
locXLSapp = new Excel.Application();
locXLSapp.Visible = true;

try
{
//open selected workbook
locXLSwbook =
(Excel._Workbook)(locXLSapp.Workbooks.Open(varFilename, false, true,
locEmpty, varPassword, locEmpty, locEmpty, locEmpty, locEmpty, locEmpty,
false, locEmpty, locEmpty, locEmpty, locEmpty));
}
catch (COMException sysExeption)
{
if (sysExeption.ErrorCode == locXLSerr_wrongpwd)
{
MessageBox.Show("falsches passwort");
}
else
{
MessageBox.Show("unerwarteter fehler");
}
if (locXLSwbook != null)
{

System.Runtime.InteropServices.Marshal.ReleaseComObject(locXLSwbook);
}
if (locXLSapp != null)
{
locXLSapp.Quit();
Application.DoEvents();

System.Runtime.InteropServices.Marshal.ReleaseComObject(locXLSapp);
}
return;
}

MessageBox.Show("jetzt sollte excel offen sein, wenn das
passwort korrekt war");

}
 

Lesen sie die antworten

#1 Frank Dzaebel
08/01/2008 - 17:08 | Warnen spam
Hallo Michael,

System.Runtime.InteropServices.Marshal.ReleaseComObject(locXLSapp);



nimm anstatt obigem folgendes:

Marshal.ReleaseComObject(locXLSapp);
GC.Collect();
GC.WaitForPendingFinalizers();


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen