打开多个Word文档时处理退出事件文件

时间:2013-10-11 10:12:14

标签: c# .net multithreading process

需要一些发烧,我创建了一个打开多个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;
        }
    }

2 个答案:

答案 0 :(得分:1)

当Word的现有实例打开时,它会重用该实例。一个短暂的进程是启动,除了告诉现有实例打开另一个文档之外什么都不做。因此,您无法可靠地等待Word退出。

也许你对Office COM对象模型有更多好运。

或者,您可以使用Process.GetProcessesByName获取所有现有的Word实例。

答案 1 :(得分:0)

您忘记使用侦听器方法绑定exit事件。 将其添加到您的代码中:

docProcess.Exited += new EventHandler(docProcess_Exited);

<强>更新 如果你只是在button_click上调用CreateNewProcessForEachDocument(),那么你的应用程序就像一个简单的单线程应用程序,就像你启动新线程一样,你要等到它完成而不是 - 继续。 看起来你需要这个:

private void CreateNewProcessForEachDocument()
{
  var docProcess = new Process {StartInfo = new ProcessStartInfo("cmd.exe"), EnableRaisingEvents = true};
  docProcess.Exited += docProcess_Exited;
  docProcess.Start();
}