在我的应用程序中,我打开一个 Excel 工作表以向用户显示我的 Excel 文档之一。但在显示 Excel 之前,我将其保存到本地计算机中的一个文件夹中,该文件夹实际上将用于显示。
当用户关闭应用程序时,我希望关闭打开的 Excel 文件并删除本地文件夹中存在的所有 Excel 文件。为此,在注销事件中,我编写了代码来关闭所有打开的文件,如下所示,
Process[] processes = Process.GetProcessesByName(fileType);
foreach (Process p in processes)
{
IntPtr pFoundWindow = p.MainWindowHandle;
if (p.MainWindowTitle.Contains(documentName))
{
p.CloseMainWindow();
p.Exited += new EventHandler(p_Exited);
}
}
在进程退出事件中,我希望删除进程已退出的 Excel 文件,如下所示
void p_Exited(object sender, EventArgs e)
{
string file = strOriginalPath;
if (File.Exists(file))
{
//Pdf issue fix
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
fs.Flush();
fs.Close();
fs.Dispose();
File.Delete(file);
}
}
但问题是这个退出事件根本没有被调用。另一方面,如果我在关闭进程的主窗口后删除文件,我会得到一个异常“文件已被另一个进程使用”。
任何人都可以帮助我如何实现我的目标,或者给我一个没有调用进程退出事件的原因吗?
您应该尝试 Dynami 的建议,但您可能还需要设置 Process.EnableRaisingEvents = true。
Process[] processes = Process.GetProcessesByName(fileType);
foreach (Process p in processes)
{
IntPtr pFoundWindow = p.MainWindowHandle;
if (p.MainWindowTitle.Contains(documentName))
{
p.EnableRaisingEvents = true;
p.Exited += new EventHandler(p_Exited);
p.CloseMainWindow();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)