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

using Word = Microsoft.Office.Interop.Word;

public void ShowWord()
{
  _word = new Word.ApplicationClass();
  _word.Visible = true;
  _word.Activate();
}

如果 word 并不总是打开,则会引发 COM 异常,说明“无法激活应用程序”。在调用 Thread.Sleep(1000) 之前添加 _word.Activate() 可以防止这种情况,但显然并不理想。
public void ShowWord()
{
  _word = new Word.ApplicationClass();
  _word.Visible = true;
  Thread.Sleep(1000)
  _word.Activate();
}

有没有人以前见过这个并且知道是什么导致了这个以及解决这个问题的正确方法是什么?

最佳答案

我们遇到了类似的问题,似乎 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();
}

希望这可以帮助某人。

关于c# - Microsoft.Office.Interop.Word "Cannot activate application",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5395449/

10-11 02:12