Udostępnij za pośrednictwem


Jak: reagowanie na zdarzenia w określonym projektem (Visual C#)

Model automatyzacji zawiera obiekty, które mogą być używane w celu reagowania na zdarzenia środowiska w Visual Studio zintegrowane środowisko dewelopowania (IDE).Zdarzenia środowiska, określonych w VSLangProj i VSLangProj80 są specyficzne dla Visual C# i Visual Basic projektów.Na przykład ImportsEvents jest wywoływane, gdy przywóz jest dodawane do lub usunięte z Visual Basic projektu.

W tym przykładzie użyto Visual C# do dodania ReferencesEvents obsługi zdarzeń, które jest specyficzne dla typu projektu do projektu Dodaj.ReferencesEventssą wywoływane, gdy odwołanie jest zmieniony, dodane lub usunięte z Visual C# lub Visual Basic projektu.

[!UWAGA]

Okien dialogowych i poleceń menu, którą widzisz mogą różnić się od tych opisanych w pomocy, w zależności od tego, aktywne ustawienia lub edition.Procedury te zostały opracowane z ogólnych ustawień rozwoju aktywnych.Aby zmienić ustawienia, wybierz polecenie Importuj i Eksportuj ustawienia na Narzędzia menu.Aby uzyskać więcej informacji, zobacz Visual Studio, ustawienia.

Odwołanie obsługi zdarzenia związane z za pomocą Visual C#

  1. Tworzenie Visual Studio dodatek projektu w Visual C#.

  2. Dodaj using VSLangProj; do początku pliku Connect.cs.

  3. Na Projekt menu, kliknij przycisk Dodaj odwołanie, kliknij przycisk .NET , a następnie wybierz pierwszy VSLangProj i kliknij przycisk OK.

  4. W klasie Połącz Zainicjuj zmienną do obsługi ReferencesEvents obiektu, a drugi do obsługi OutputWindowPane.

        private DTE2 _applicationObject;
        private AddIn _addInInstance;
        private VSLangProj.ReferencesEvents refEvents;
        private OutputWindowPane outputWinPane;
    

    W tym przykładzie zmienna o nazwie refEvents.

    Innych obiektów w modelu automatyzacji odnoszą się do innych typów zdarzeń, które są specyficzne dla projektu.Na przykład ImportsEvents jest wywoływane, gdy przywóz jest dodane lub usunięte z Imports kolekcji.BuildManagerEventsstosuje się do zdarzeń związanych z zestawów tymczasowych zbudowany z wyjść z narzędzia niestandardowe.Aby uzyskać więcej informacji na BuildManager obiektów, zobacz Wprowadzenie do obiektu, Obiekt BuildManager.Aby uzyskać pełną listę zdarzeń, które są specyficzne dla typów projektów, zobacz Obiekty zdarzeń (szczególne rodzaje projektów)i listę zdarzeń automatyzacji ogólne, zobacz Obiekty zdarzeń automatyzacji.

  5. W OnConnection metodę, zainicjować zmienną, aby przechwytywać zdarzenia.W tym przykładzie zmienna jest nazywany events.

    EnvDTE80.Events2 events = 
    (EnvDTE80.Events2)_applicationObject.Events;
    
  6. W OnConnection metodę, zainicjować OutputWindow zmienna.

    OutputWindow outputWindow = (OutputWindow)_applicationObject.Windows.Item
    (Constants.vsWindowKindOutput).Object;
    outputWinPane = outputWindow.OutputWindowPanes.Add
    ("ReferencesEvents Event Information");
    
  7. Również w OnConnection metody pobierania obiektów zdarzeń z modelu automatyzacji.

    refEvents = 
    (VSLangProj.ReferencesEvents)events.GetObject
    ("CSharpReferencesEvents");
    

    W tym przykładzie ReferencesEvents są specyficzne dla Visual C# projektów.Odpowiadanie na Visual Basic określonych zdarzeń, zamień ciąg, CSharpReferencesEvents, z VBReferencesEvents.Aby uzyskać więcej informacji na temat sposobu ustalenia ciągi znaków, aby użyć zdarzenia, które są specyficzne dla różnych typów projektów, zobacz Obiekty zdarzeń (szczególne rodzaje projektów).

  8. Połączyć się z każdego obiektu delegowanego narażone z obiektów zdarzeń pobraną w kroku 3 przy użyciu += operator.Na przykład, aby połączyć się z delegatów udostępniane przez ReferenceAdded zdarzenia, należy użyć:

    refEvents.ReferenceAdded += new 
    _dispReferencesEvents_ReferenceAddedEventHandler
    (this.ReferenceAdded);
    
  9. Dodawanie procedury dla każdego zdarzenia, który jest powiązany obiekt zdarzenia.Na przykład aby obsłużyć zdarzenia, który występuje, gdy odwołanie jest dodawany, należy użyć:

    public void ReferenceAdded( VSLangProj.Reference addedRef ) 
    { 
        outputWinPane.OutputString( "ReferencesEvents.ReferenceAdded" 
    + "\n" ); 
        outputWinPane.OutputString( "The reference to " + addedRef.Name
     + " was added." + "\n" ); 
    }
    

    W odniesieniu do ReferencesEvents, musi mieć zdefiniowany dla zdarzeń:

    i

    Pełna lista w poniższym przykładzie zawiera te zdarzenia.

  10. Wreszcie Aby zapobiec Visual Studio spowalniały one systemu poprzez kontynuowanie monitorowania zdarzeń związanych z okna, po zamknięciu dodatku, należy wyłączyć obsługę zdarzeń.W Visual C# jest to wykonywane za pomocą operatora-=.Na przykład, aby wyłączyć obsługi zdarzeń dla ReferenceAdded należy użyć:

    refEvents.ReferenceAdded -= new
     _dispReferencesEvents_ReferenceAddedEventHandler
    (this.ReferenceAdded);
    

    Ta opcja powoduje wyłączenie obsługi zdarzeń, czy dodatek lub IDE jest zamknięty, podczas gdy nadal jest uruchomiony dodatek.Podczas zamykania IDE wszystkie uruchomione dodatki są automatycznie zamknięty pierwszej.

Przykład

Poniższy przykład stanowi podstawowy Visual Studio dodatek, który demonstruje, jak przechwycić i obsługi Visual C# odwołać zdarzeń w Visual Studio.W każdym przypadku, gdy wystąpi zdarzenie odniesienia, komunikat z powiadomieniem jest wysyłana do produkcji okna.

using System;
using Microsoft.VisualStudio.CommandBars;
using Extensibility;
using EnvDTE;
using EnvDTE80;
using VSLangProj;

public Connect()
  {
  }
  public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom)
  {
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;

    // Retrieve the event objects from the automation model.
    EnvDTE80.Events2 events = 
(EnvDTE80.Events2)_applicationObject.Events;
    // Send event messages to the Output window.
    OutputWindow outputWindow =
 (OutputWindow)_applicationObject.Windows.Item
(Constants.vsWindowKindOutput).Object;
    outputWinPane = 
outputWindow.OutputWindowPanes.Add
("ReferencesEvents Event Information");

    // Retrieve the event objects from the automation model.
    refEvents = (VSLangProj.ReferencesEvents)
events.GetObject("CSharpReferencesEvents");

    // Connect to each delegate exposed from each object 
    // retrieved above.
    refEvents.ReferenceAdded += new
 _dispReferencesEvents_ReferenceAddedEventHandler
(this.ReferenceAdded);
    refEvents.ReferenceChanged += new
 _dispReferencesEvents_ReferenceChangedEventHandler
(this.ReferenceChanged);
    refEvents.ReferenceRemoved += new
 _dispReferencesEvents_ReferenceRemovedEventHandler
(this.ReferenceRemoved); 
  }

  public void OnDisconnection(Extensibility.ext_DisconnectMode
 disconnectMode, ref System.Array custom)
  {
    // If the delegate handlers have been connected, then 
    // disconnect them here. 
    // If you do not do this, the handlers may still 
    // fire because they have not been garbage collected.
    if (refEvents != null)
    {
        refEvents.ReferenceAdded -= new
 _dispReferencesEvents_ReferenceAddedEventHandler
(this.ReferenceAdded);
        refEvents.ReferenceChanged -= new
 _dispReferencesEvents_ReferenceChangedEventHandler
(this.ReferenceChanged);
        refEvents.ReferenceRemoved -= new
 _dispReferencesEvents_ReferenceRemovedEventHandler
(this.ReferenceRemoved); 
    }
  }

  // References related events.
  public void ReferenceRemoved( VSLangProj.Reference removedRef ) 
  { 
    outputWinPane.OutputString( "ReferencesEvents.ReferenceRemoved"
 + "\n" ); 
    outputWinPane.OutputString( "The reference to " + removedRef.Name
 + " was removed." + "\n" ); 
  } 

  public void ReferenceChanged( VSLangProj.Reference changedRef ) 
  { 
    outputWinPane.OutputString( "ReferencesEvents.ReferenceChanged" 
+ "\n" ); 
    outputWinPane.OutputString( "The reference to " + changedRef.Name 
+ " was changed." + "\n" ); 
  } 
        
  public void ReferenceAdded( VSLangProj.Reference addedRef ) 
  { 
    outputWinPane.OutputString( "ReferencesEvents.ReferenceAdded" +
 "\n" ); 
    outputWinPane.OutputString( "The reference to " + addedRef.Name 
+ " was added." + "\n" ); 
  } 
  public void OnAddInsUpdate(ref System.Array custom)
  {
  }
  public void OnStartupComplete(ref System.Array custom)
  {
  }
  public void OnBeginShutdown(ref System.Array custom)
  {
  }
  private DTE2 _applicationObject;
  private AddIn _addInInstance;
  private VSLangProj.ReferencesEvents refEvents;
  private OutputWindowPane outputWinPane;
  }}

Kompilowanie kodu

Aby skompilować kod, Utwórz nowy Visual Studio dodatek projektu w Visual C# i Zastąp kod w przykładzie kodu klasy Połącz.Aby uzyskać informacje o sposobach uruchamiania dodatku, zobacz Jak: dodatki formantu przy użyciu dodać Menedżera.

Zobacz też

Zadania

Jak: reagowanie na zdarzenia w określonym projektem (Visual Basic)

Informacje

+= Operator (C# odniesienia)

-= Operator (C# odniesienia)

Inne zasoby

Reagowanie na zdarzenia automatyzacji

Reagowanie na zdarzenia (Visual Basic i Visual C# projektów)