C# 打开多个word文档时进程退出事件文件

C# 打开多个word文档时进程退出事件文件,c#,.net,multithreading,process,C#,.net,Multithreading,Process,需要一些发烧,我已经创建了一个桌面应用程序,可以打开多个word文档。 但在这里,我面临一个问题,即当第二个文档打开时,第一个文档的退出事件会在不关闭该文档的情况下触发 下面是我的代码 private void CreateNewProcessForEachDocument() { try { docProcess = new Process(); docProcess.StartInfo = new

需要一些发烧,我已经创建了一个桌面应用程序,可以打开多个word文档。 但在这里,我面临一个问题,即当第二个文档打开时,第一个文档的退出事件会在不关闭该文档的情况下触发

下面是我的代码

   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在运行时获取类型。