c# - 使用 C# 中的动态 com 互操作处理来自 Word 的事件

标签 c# com delegates silverlight-4.0 event-handling

从 Silverlight 4 开始,启动 Word 并让用户执行某些操作非常容易:

dynamic word = System.Runtime.InteropServices.Automation.CreateObject("Word.Application");
word.Visible = true;
word.Documents.Open("test.doc");

MS Word 公开退出事件[1]。我想处理这个事件,但我一辈子都不知道如何处理。我尝试这样做:

public delegate void WordQuitEventHandler(object sender, ref bool cancel);
public event WordQuitEventHandler OnQuit;
private void WordOnQuit(dynamic sender, ref bool cancel)
{
    if (OnQuit != null)
    {
        OnQuit(this, ref cancel);
    }
}

然后做

word.Quit = WordOnQuit;

word.Quit += WordOnQuit;

但是无法将 WordOnQuit 的委托(delegate)分配给动态对象 word.Quit。那么如何捕获这个事件呢?

[1] http://msdn.microsoft.com/en-us/library/aa211898(v=office.11).aspx

最佳答案

为了完整起见,您要找的人是......

AutomationEvent quitEvent = AutomationFactory.GetEvent(word,"Quit");
quitEvent.EventRaised += new EventHandler<AutomationEventArgs>(quitEvent_EventRaised);

当然,您可以根据需要内联回调。

此外,我发现此事件可能有点不稳定。大多数时候它会触发...大多数时候:-)

HTH。

关于c# - 使用 C# 中的动态 com 互操作处理来自 Word 的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3513208/

相关文章:

.net - 如何使用 COM 类构建互操作(用 delphi 编写)

c# - WinRT 和持久化结构与字节数组?

c# - 具有客户端过滤功能的 ajax 下拉菜单

c# - Farseer 3.3 DebugViewXNA - 连接起来

delphi - 以可执行的免注册方式使用 COM 对象

c# - 需要 ClassInterfaceType.None 吗?

javascript - JS 委托(delegate)/扩展现有功能

qt - 在 QML 中,(如何)我可以将 MapItemGroup 作为 MapItemView 的委托(delegate)组件?

ios - 实现从 viewController 到 DataManager 类的委托(delegate)

c# - 对 Web Api 的 MVC 请求