C# 打开多个word文档时进程退出事件文件
需要一些发烧,我已经创建了一个桌面应用程序,可以打开多个word文档。 但在这里,我面临一个问题,即当第二个文档打开时,第一个文档的退出事件会在不关闭该文档的情况下触发 下面是我的代码C# 打开多个word文档时进程退出事件文件,c#,.net,multithreading,process,C#,.net,Multithreading,Process,需要一些发烧,我已经创建了一个桌面应用程序,可以打开多个word文档。 但在这里,我面临一个问题,即当第二个文档打开时,第一个文档的退出事件会在不关闭该文档的情况下触发 下面是我的代码 private void CreateNewProcessForEachDocument() { try { docProcess = new Process(); docProcess.StartInfo = new
private void CreateNewProcessForEachDocument()
{
try
{
docProcess = new Process();
docProcess.StartInfo = new ProcessStartInfo(string.Concat(folderPath, fileName));
docProcess.EnableRaisingEvents = true;
docProcess.Exited += new EventHandler(docProcess_Exited);
docProcess.Start();
docProcess.WaitForExit();
docProcess.Close();
}
catch (Exception ex)
{
throw ex;
}
}
private void docProcess_Exited(object sender, EventArgs e)
{
try
{
var client = new ValidateClientClient();
byte[] fileData = File.ReadAllBytes(string.Concat(folderPath, fileName));
bool fileSaved = client.SaveDocument(fileData, fileName, username);
string filePath = Path.GetFullPath(string.Concat(folderPath, fileName));
if (fileSaved && File.Exists(filePath))
{
File.Delete(filePath);
}
}
catch (Exception ex)
{
throw ex;
}
}
您忘了用侦听器方法绑定退出事件。 将此添加到您的代码中:
docProcess.Exited += new EventHandler(docProcess_Exited);
更新:
如果您只是在单击按钮时调用CreateNewProcessForEachDocument(),那么您的应用程序就像一个简单的单线程应用程序一样工作,就像启动新线程一样,您需要等待它完成,然后-继续。
看起来你需要这个:
private void CreateNewProcessForEachDocument()
{
var docProcess = new Process {StartInfo = new ProcessStartInfo("cmd.exe"), EnableRaisingEvents = true};
docProcess.Exited += docProcess_Exited;
docProcess.Start();
}
当Word的现有实例打开时,它将重用该实例。一个短暂的过程是启动,它只告诉现有实例打开另一个文档。因此,您不能可靠地等待Word退出 也许使用Office COM对象模型会更幸运
或者,您可以使用
Process.getProcessByName
获取所有现有的Word实例。很抱歉,我忘了输入它,但我的问题是,当我们为它启动新进程时,其他操作系统只处理一个winword进程,然后它会关闭上一个进程如果我没记错的话,Office产品不是只在运行对象表中注册一次吗?您是否考虑过将每个Word文档作为COM对象,然后以这种方式进行处理?您可以使用互操作库PInvoke,甚至可以通过获取活动实例或编组Word.Document在运行时获取类型。