4.8订阅事件

来源:互联网 发布:json 20160212.jar 编辑:程序博客网 时间:2024/06/09 20:38

订阅事件

Visual Studio 2015
其他版本
 

若要了解有关 Visual Studio 2017 RC 的最新文档,请参阅 Visual Studio 2017 RC 文档。

本演练说明了如何创建一个工具窗口,对正在运行的 document 表 (RDT) 的事件做出响应。 工具窗口承载用户控件实现IVsRunningDocTableEvents。 AdviseRunningDocTableEvents方法连接到这些事件的接口。

先决条件

启动 Visual Studio 2015 中,您并不安装 Visual Studio SDK 从下载中心获得。 它将包括作为 Visual Studio 安装程序中的可选功能。 您还可以在以后安装 VS SDK。 有关详细信息,请参阅安装 Visual Studio SDK。

璹綷 RDT 事件

若要使用的工具窗口创建扩展

  1. 创建一个名为项目RDTExplorer使用 VSIX 模板,并将添加一个名为的自定义工具窗口项模板RDTExplorerWindow

    有关使用一个工具窗口创建扩展的详细信息,请参阅使用一个工具窗口创建扩展。

璹綷 RDT 事件

  1. 打开 RDTExplorerWindowControl.xaml 文件并删除名为的按钮button1。 添加ListBox控件并接受默认名称。 Grid 元素应该如下所示︰

    XML
    <Grid>      <StackPanel Orientation="Vertical" Margin="-10,10,10,0">          <TextBlock Margin="10" HorizontalAlignment="Center">RDTExplorerWindow</TextBlock>          <ListBox x:Name="listBox" Height="100" />      </StackPanel>  </Grid>  
  2. 在代码视图中打开 RDTExplorerWindow.cs 文件。 将以下代码添加到开始的文件的 using 语句。

    C#
    using Microsoft.VisualStudio;  using Microsoft.VisualStudio.Shell;  using Microsoft.VisualStudio.Shell.Interop;  
  3. 修改RDTExplorerWindow类这样,除了派生自ToolWindowPane类,它实现IVsRunningDocTableEvents接口。

    C#
    public class RDTExplorerWindow : ToolWindowPane, IVsRunningDocTableEvents  {. . .}  
  4. 实现IVsRunningDocTableEvents。

    • 实现接口。 将光标置于 IVsRunningDocTableEvents 名称。 您应该看到左侧边距中该变量的灯泡图标。 单击灯泡图标右侧的向下箭头,然后选择实现接口
  5. 在接口中的每个方法,将行throw new NotImplementedException();与此︰

    C#
    return VSConstants.S_OK;  
  6. 将 cookie 字段添加到 RDTExplorerWindow 类。

    C#
    private uint rdtCookie;   

    它将保存所返回的 cookie AdviseRunningDocTableEvents方法。

  7. 重写 RDTExplorerWindow initialize () 方法,以注册 RDT 事件。 您始终应在 ToolWindowPane initialize () 方法中,未在构造函数可以获得服务。

    C#
    protected override void Initialize()  {      IVsRunningDocumentTable rdt = (IVsRunningDocumentTable)      this.GetService(typeof(SVsRunningDocumentTable));      rdt.AdviseRunningDocTableEvents(this, out rdtCookie);  }  

    SVsRunningDocumentTable服务调用以获得IVsRunningDocumentTable接口。 AdviseRunningDocTableEvents方法连接到一个对象,实现 RDT 事件IVsRunningDocTableEvents,在这种情况下,RDTExplorer 对象。

  8. 更新 RDTExplorerWindow 的 dispose () 方法。

    C#
    protected override void Dispose(bool disposing)  {      // Release the RDT cookie.      IVsRunningDocumentTable rdt = (IVsRunningDocumentTable)          Package.GetGlobalService(typeof(SVsRunningDocumentTable));      rdt.UnadviseRunningDocTableEvents(rdtCookie);      base.Dispose(disposing);  }  

    UnadviseRunningDocTableEvents方法删除之间的连接RDTExplorer和 RDT 事件通知。

  9. 将以下行添加到主体OnBeforeLastDocumentUnlock处理程序中,紧前面return语句。

    C#
    public int OnBeforeLastDocumentUnlock(uint docCookie, uint dwRDTLockType, uint dwReadLocksRemaining, uint dwEditLocksRemaining)  {      ((RDTExplorerWindowControl)this.Content).listBox.Items.Add("Entering OnBeforeLastDocumentUnlock");      return VSConstants.S_OK;  }  
  10. 将类似的代码行添加到主体OnAfterFirstDocumentLock处理程序和你想要在列表框中查看其他事件。

    C#
    public int OnAfterFirstDocumentLock(uint docCookie, uint dwRDTLockType, uint dwReadLocksRemaining, uint dwEditLocksRemaining)  {      ((RDTExplorerWindowControl)this.Content).listBox.Items.Add("Entering OnAfterFirstDocumentLock");      return VSConstants.S_OK;  }  
  11. 生成项目并启动调试。 将显示 Visual Studio 实验实例。

  12. 打开RDTExplorerWindow (视图 / 其他窗口 / RDTExplorerWindow)。

    RDTExplorerWindow窗口将打开与空的事件列表。

  13. 打开或创建一个解决方案。

    作为OnBeforeLastDocumentOnAfterFirstDocument,将激发事件,通知的每个事件就会出现在事件列表。

原创粉丝点击