Как обработать событие Word close из приложения WinForms? - PullRequest
1 голос
/ 02 декабря 2010

У меня есть приложение WinForms, и я ищу способ сделать следующее:

  1. Нажмите ссылку, чтобы создать документ Word из BLOB-объекта в базе данных и открыть его.
  2. Блокируйте приложение WinForms, пока Word не закроется.
  3. Обрабатывать при закрытии Word, проверять, был ли документ изменен, и сохранять изменения в базе данных.

Проблема, с которой я сталкиваюсь, заключается не в том, чтобы создать документ 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 Ответ

3 голосов
/ 02 декабря 2010

Вы можете дождаться закрытия процесса, используя следующий код:

process.WaitForExit();

когда слово закроется, вы можете проверить, изменен ли файл, и сохранить его в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...