Microsoft.Office.Interop.Word“无法激活应用程序”

bri*_*ler 3 c# vsto office-interop

尝试通过Office互操作从我们的应用程序启动Word时,一些用户遇到了一个问题:

using Word = Microsoft.Office.Interop.Word;

public void ShowWord()
{
  _word = new Word.ApplicationClass();
  _word.Visible = true;
  _word.Activate();
}
Run Code Online (Sandbox Code Playgroud)

如果word不能总是打开,则会引发COM异常,指出“无法激活应用程序”。Thread.Sleep(1000)在调用之前添加一个pre _word.Activate()可以防止这种情况,但显然并不理想。

public void ShowWord()
{
  _word = new Word.ApplicationClass();
  _word.Visible = true;
  Thread.Sleep(1000)
  _word.Activate();
}
Run Code Online (Sandbox Code Playgroud)

有没有人以前见过这个,并且知道是什么原因造成的,以及解决这个问题的正确方法是什么?

Sim*_*ory 5

我们遇到了类似的问题,似乎Word正在异步等待操作系统显示其窗口。我们解决此问题的方法是等待Visible属性返回true:

public void ShowWord()
{
  _word = new Word.Application();
  _word.Visible = true;

  System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();
  while (!_word.Visible && sw.ElapsedMilliseconds < 10000)
  { /* Just Wait!! (at most 10s) */}
  _word.Activate();
}
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助。