S’abonner à un événementSubscribing to an Event

Cette procédure pas à pas explique comment créer une fenêtre outil qui répond aux événements dans une table de documents en cours d’exécution (r & DT).This walkthrough explains how to create a tool window that responds to events in a running document table (RDT). Une fenêtre outil héberge un contrôle utilisateur qui implémente IVsRunningDocTableEvents.A tool window hosts a user control that implements IVsRunningDocTableEvents. Le AdviseRunningDocTableEvents méthode connecte à l’interface pour les événements.The AdviseRunningDocTableEvents method connects the interface to the events.

PrérequisPrerequisites

À partir de Visual Studio 2015, vous n’installez pas le Kit de développement logiciel Visual Studio à partir du centre de téléchargement.Starting in Visual Studio 2015, you do not install the Visual Studio SDK from the download center. Il est inclus comme une fonctionnalité facultative dans le programme d’installation de Visual Studio.It is included as an optional feature in Visual Studio setup. Vous pouvez également installer le kit SDK VS ultérieurement.You can also install the VS SDK later on. Pour plus d’informations, consultez l’installation de Visual Studio SDK.For more information, see Installing the Visual Studio SDK.

S’abonner aux événements de r & DTSubscribing to RDT Events

Pour créer une extension avec une fenêtre outilTo create an extension with a tool window

  1. Créez un projet nommé RDTExplorer à l’aide du modèle VSIX et ajouter un modèle d’élément de fenêtre outil personnalisé nommé RDTExplorerWindow.Create a project named RDTExplorer using the VSIX template, and add a custom tool window item template named RDTExplorerWindow.

    Pour plus d’informations sur la création d’une extension avec une fenêtre outil, consultez création d’une Extension avec une fenêtre outil.For more information about creating an extension with a tool window, see Creating an Extension with a Tool Window.

S’abonner aux événements de r & DTTo subscribe to RDT events

  1. Ouvrez le fichier RDTExplorerWindowControl.xaml et supprimez le bouton nommé button1.Open the RDTExplorerWindowControl.xaml file and delete the button named button1. Ajouter un ListBox contrôler et acceptez le nom par défaut.Add a ListBox control and accept the default name. L’élément de grille doit ressembler à ceci :The Grid element should look like this:

    <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. Ouvrez le fichier RDTExplorerWindow.cs en mode code.Open the RDTExplorerWindow.cs file in code view. Ajoutez le code suivant à l’aide d’instructions au début du fichier.Add the following using statements to the start of the file.

    using Microsoft.VisualStudio;  
    using Microsoft.VisualStudio.Shell;  
    using Microsoft.VisualStudio.Shell.Interop;  
    
  3. Modifier la RDTExplorerWindow classe ainsi que, en plus de la dérivation à partir de la ToolWindowPane (classe), il implémente la IVsRunningDocTableEvents interface.Modify the RDTExplorerWindow class so that, in addition to deriving from the ToolWindowPane class, it implements the IVsRunningDocTableEvents interface.

    public class RDTExplorerWindow : ToolWindowPane, IVsRunningDocTableEvents  
    {. . .}  
    
  4. Implémentez IVsRunningDocTableEvents.Implement IVsRunningDocTableEvents.

    • Implémentez l’interface.Implement the interface. Placez le curseur sur le nom de IVsRunningDocTableEvents.Place the cursor on the IVsRunningDocTableEvents name. Vous devez voir une ampoule dans la marge de gauche.You should see a light bulb in the left margin. Cliquez sur la flèche située à droite de l’ampoule et sélectionnez implémenter l’interface.Click the Down arrow to the right of the light bulb and select Implement interface.
  5. Chaque méthode dans l’interface, remplacez la ligne throw new NotImplementedException(); avec ce :In each method in the interface, replace the line throw new NotImplementedException(); with this:

    return VSConstants.S_OK;  
    
  6. Ajoutez un champ de cookie à la classe RDTExplorerWindow.Add a cookie field to the RDTExplorerWindow class.

    private uint rdtCookie;   
    

    Cela maintient le cookie qui est retourné par la AdviseRunningDocTableEvents (méthode).This holds the cookie that is returned by the AdviseRunningDocTableEvents method.

  7. Substituez la méthode Initialize() du RDTExplorerWindow inscrire les événements de r & DT.Override the RDTExplorerWindow's Initialize() method to register for RDT events. Vous devez toujours obtenir les services dans la méthode Initialize() de la ToolWindowPane, pas dans le constructeur.You should always get services in the ToolWindowPane's Initialize() method, not in the constructor.

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

    Le SVsRunningDocumentTable service est appelé pour obtenir un IVsRunningDocumentTable interface.The SVsRunningDocumentTable service is called to obtain an IVsRunningDocumentTable interface. Le AdviseRunningDocTableEvents méthode connecte les événements de r & DT à un objet qui implémente IVsRunningDocTableEvents, dans ce cas, un objet RDTExplorer.The AdviseRunningDocTableEvents method connects RDT events to an object that implements IVsRunningDocTableEvents, in this case, a RDTExplorer object.

  8. Mettre à jour de la méthode Dispose() de la RDTExplorerWindow.Update the RDTExplorerWindow's Dispose() method.

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

    Le UnadviseRunningDocTableEvents méthode supprime la connexion entre RDTExplorer et la notification d’événement de r & DT.The UnadviseRunningDocTableEvents method deletes the connection between RDTExplorer and RDT event notification.

  9. Ajoutez la ligne suivante dans le corps de la OnBeforeLastDocumentUnlock gestionnaire, juste avant la return instruction.Add the following line to the body of the OnBeforeLastDocumentUnlock handler, just before the return statement.

    public int OnBeforeLastDocumentUnlock(uint docCookie, uint dwRDTLockType, uint dwReadLocksRemaining, uint dwEditLocksRemaining)  
    {  
        ((RDTExplorerWindowControl)this.Content).listBox.Items.Add("Entering OnBeforeLastDocumentUnlock");  
        return VSConstants.S_OK;  
    }  
    
  10. Ajouter une ligne semblable au corps de la OnAfterFirstDocumentLock gestionnaire et à d’autres événements que vous souhaitez voir dans la zone de liste.Add a similar line to the body of the OnAfterFirstDocumentLock handler and to other events that you want to see in the list box.

    public int OnAfterFirstDocumentLock(uint docCookie, uint dwRDTLockType, uint dwReadLocksRemaining, uint dwEditLocksRemaining)  
    {  
        ((RDTExplorerWindowControl)this.Content).listBox.Items.Add("Entering OnAfterFirstDocumentLock");  
        return VSConstants.S_OK;  
    }  
    
  11. Générez le projet et commencez le débogage.Build the project and start debugging. L’instance expérimentale de Visual Studio s’affiche.The Visual Studio experimental instance appears.

  12. Ouvrez le RDTExplorerWindow (affichage / autres fenêtres / RDTExplorerWindow).Open the RDTExplorerWindow (View / Other Windows / RDTExplorerWindow).

    Le RDTExplorerWindow fenêtre s’ouvre avec une liste d’événements vide.The RDTExplorerWindow window opens with an empty event list.

  13. Ouvrez ou créez une solution.Open or create a solution.

    En tant que OnBeforeLastDocument et OnAfterFirstDocument les événements sont déclenchés, la notification de chaque événement apparaît dans l’événement de liste.As OnBeforeLastDocument and OnAfterFirstDocument events are fired, notification of each event appears in the event list.