当用户关闭最后一个文档时,防止Word应用程序终止

时间:2014-11-21 15:09:03

标签: c# .net c#-4.0 ms-word office-interop

我有一个简单的Win Forms应用程序,它由Button控件,OpenFileDialog组件和Microsoft.Office.Interop.Word.Application对象组成:

using System;
using System.Windows.Forms;

namespace WordInterop
{
    public partial class Form1 : Form
    {

        // From Form1.Designer.cs:
        //Button openButton;
        //FileOpenDialog openFileDialog;

        private Microsoft.Office.Interop.Word.Application _wordApp;

        public Form1()
        {
            InitializeComponent();
            _wordApp = new Microsoft.Office.Interop.Word.Application();
        }

        protected override void OnClosed(EventArgs e)
        {
            _wordApp.Quit();
            base.OnClosed(e);
        }

        private void _openButton_Click(object sender, EventArgs e)
        {
            DialogResult result = openFileDialog.ShowDialog();
            if (result == DialogResult.OK) {

                 // Throws COMException if Word app is not longer running
                _wordApp.Documents.Open(openFileDialog.FileName);

                _wordApp.Visible = true;
            }
        }
    }
}

当用户点击Open按钮时,他们可以通过OpenFileDialog选择Word文档。所选文档的文件名用于使用Microsoft.Office.Interop.Word.Application对象打开Word文档。

当用户关闭最后一个文档时,Word应用程序似乎已终止:如果用户单击Open按钮,选择文档,关闭文档,单击Open按钮并选择第二次记录时,出现COMException消息 RPC服务器不可用。如果至少打开一个文档,则用户可以在没有COMException的情况下打开文档。

有什么办法可以阻止Word应用程序在用户关闭上一个文档时终止?

我尝试通过将Form1构造函数更改为以下内容来创建隐藏的空白文档:

public Form1()
{
    InitializeComponent();
    _wordApp = new Microsoft.Office.Interop.Word.Application();
    _wordApp.Documents.Add(Visible: false);
}

但是,当用户打开文档时,空白文档变为可见,这意味着用户仍可以终止Word应用程序。

1 个答案:

答案 0 :(得分:0)

在按钮单击上创建一个新的Microsoft.Office.Interop.Word.Application()实例。

  private void _openButton_Click(object sender, EventArgs e)
    {
        DialogResult result = openFileDialog.ShowDialog();
        if (result == DialogResult.OK) {

            _wordApp = new Microsoft.Office.Interop.Word.Application();
            _wordApp.Documents.Open(openFileDialog.FileName);
            _wordApp.Visible = true;
        }
    }