我有一个简单的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应用程序。
答案 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;
}
}