0

熱が必要なので、複数の Word 文書を開くデスクトップ アプリケーションを 1 つ作成しました。しかし、ここでは、2 番目のドキュメントが開いているときに、最初のドキュメントの exited イベントがそのドキュメントを閉じずに発生するという 1 つの問題に直面しています。

以下は私のコードです

   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;
        }
    }
4

2 に答える 2

1

Word の既存のインスタンスが開かれている場合、そのインスタンスが再利用されます。短命のプロセスは、既存のインスタンスに別のドキュメントを開くように指示するだけの起動です。そのため、Word が終了するのを確実に待つことはできません。

Office COM オブジェクト モデルの方がうまくいくかもしれません。

または、Process.GetProcessesByName既存のすべての Word インスタンスを取得するために使用できます。

于 2013-10-11T11:35:18.220 に答える
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();
}
于 2013-10-11T10:33:11.997 に答える