如何从WinForms应用程序处理Word关闭事件?

时间:2010-12-01 21:50:48

标签: c# .net winforms ms-word

我有一个WinForms应用程序,我正在寻找一种方法来执行以下操作:

  1. 单击链接以从数据库中的BLOB创建Word文档并将其打开。
  2. 阻止WinForms应用程序直到Word关闭。
  3. 关闭Word时处理,检查文档是否已更改,并保留对数据库的更改。
  4. 我遇到的问题不是创建Word文档并打开它,但它正在挂起Word进程以了解Word何时关闭。是否有一些库可以用来执行此操作或任何可以显示如何完成此任务的教程?

    请参阅已接受的解决方案,但这是我用来完成任务的代码:

    protected static string FilePath { get; set; }
    
    public static void DisplayDocument(byte[] documentBytes, string filePath)
    {
        FilePath = filePath;
    
        if (documentBytes == null) return;
    
        if (!Directory.Exists(TEMP_FILE_DIRECTORY))
            Directory.CreateDirectory(TEMP_FILE_DIRECTORY);
    
        if (File.Exists(FilePath)) File.Delete(FilePath);
    
        try
        {
            FileStream fs = new FileStream(FilePath, FileMode.Create);
            fs.Write(documentBytes, 0, Convert.ToInt32(documentBytes.Length));
            fs.Seek(0, SeekOrigin.Begin);
            fs.Close();
    
            ProcessStartInfo psi = new ProcessStartInfo(FilePath);
            Process process = Process.Start(psi);
            process.EnableRaisingEvents = true;
            process.Exited += process_Exited;
    
            process.WaitForExit();    
        }
        catch (Exception e)
        {
            MessageHandler.Show(e.Message, Strings.ErrorOpeningFile);
        }
    }
    
    private static void process_Exited(object sender, EventArgs e)
    {
        FileInfo fileInfo = new FileInfo(FilePath);
        if(fileInfo.CreationTime.CompareTo(fileInfo.LastWriteTime) < 0)
            Debug.WriteLine("File updated, perform database upload here."); 
    }
    

1 个答案:

答案 0 :(得分:3)

您可以使用以下代码等待关闭进程:

process.WaitForExit();

当word关闭时,您可以检查文件是否被修改并将其存储在数据库中。