我正在编写一个与Excel密切合作的程序。执行我的Exit命令时,我似乎遇到了麻烦。它不仅会关闭它创建的所有excel实例(这是任何事情悬挂的重点),但它也会关闭任何手动打开的excel实例。
有人能够指出我出错的地方吗?
(另外,我正在学习C#,所以请原谅任何“常见”错误。欢迎所有建设性批评。)
private void BtnExit_Click_1(object sender, EventArgs e)
{
try
{
if (ObjApp == null)
{
Excel.Application ObjApp = new Excel.Application();
}
Modules.MessageUpdate(this, ObjApp, EH, 5, 22, "", "", "", 0, 0, 0, 0, "Application Quit.", "N");
ObjApp.Quit();
if (ObjApp != null)
{
ObjApp = null;
}
if (UC != null)
{
UC = null;
}
if (Zoho != null)
{
Zoho = null;
}
if (Modules != null)
{
Modules = null;
}
if (EH != null)
{
EH = null;
}
if (proc != null)
{
proc = null;
}
if (Wait != null)
{
Wait.Close();
Wait = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
Environment.Exit(0);
}
catch(COMException)
{
//System.Windows.Forms.Application.Restart();
if (ObjApp != null)
{
ObjApp = null;
}
if (UC != null)
{
UC = null;
}
if (Zoho != null)
{
Zoho = null;
}
if (Modules != null)
{
Modules = null;
}
if (EH != null)
{
EH = null;
}
if (proc != null)
{
proc = null;
}
if (Wait != null)
{
Wait.Close();
Wait = null;
}
//ObjApp.Quit();
GC.Collect();
GC.WaitForPendingFinalizers();
Environment.Exit(0);
}
catch
{
if (ObjApp != null)
{
ObjApp = null;
}
if (UC != null)
{
UC = null;
}
if (Zoho != null)
{
Zoho = null;
}
if (Modules != null)
{
Modules = null;
}
if (EH != null)
{
EH = null;
}
if (proc != null)
{
proc = null;
}
if (Wait != null)
{
Wait.Close();
Wait = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
Environment.Exit(0);
}
}
答案 0 :(得分:1)
保留您的应用程序创建的工作簿列表,然后让您的"退出"关闭那些工作簿。如果最后一个工作簿关闭,Excel有剩余的工作簿,则关闭Excel,否则保持打开状态,手动工作簿仍然可用。