Como: Se inscrever e Cancelar inscrição de eventos (guia de programação translation from VPE for Csharp)

Você se inscrever em um evento é publicado por outra classe quando você deseja escrever código personalizado que é chamado quando esse evento é gerado.Por exemplo, você pode assinar para click evento para que o seu aplicativo faça algo útil quando o usuário clica no botão.

Para inscrever-se em eventos usando o Visual Studio IDE

  1. Se você não conseguir ver o Propriedades janela Design modo, clicar com o botão direito do mouse no formulário ou controle para o qual você deseja criar um manipulador de eventos e selecionar Propriedades.

  2. Na parte superior da Propriedades janela, clicar no Eventos ícone.

  3. clicar duas vezes no evento que você deseja criar, por exemplo o Load evento.

    Visual C# cria um vazio evento manipulador de método e o adiciona ao seu código. Como alternativa você pode adicionar o código manualmente no Códigomodo de exibição de .Por exemplo, as linhas de código a seguir declaram um método do manipulador de eventos será chamado quando o Form classe gera o Load evento.

    private void Form1_Load(object sender, System.EventArgs e)
    {
        // Add your form load event handling code here.
    }
    

    A linha de código que é necessário para assinar o evento é gerada automaticamente também no InitializeComponent método no arquivo Form1.Designer.cs no seu projeto. Parece com isto:

      this.Load += new System.EventHandler(this.Form1_Load);
    

Para inscrever-se em eventos por meio de programação

  1. Defina um método de manipulador de eventos cuja assinatura coincide com a assinatura do delegado do evento.Por exemplo, se o evento se baseia o EventHandler tipo de delegado, o código a seguir representa o stub do método:

      void HandleCustomEvent(object sender, CustomEventArgs a)
      {
         // Do something useful here.
      }
    
  2. Use o operador de atribuição de adição (+=) para anexar seu manipulador de eventos ao evento. O exemplo a seguir, suponha que um objeto chamado publisher possui um evento de chamada RaiseCustomEvent. Observe que a classe assinante precisa de uma referência para a classe do publicador para assinar seus eventos.

    publisher.RaiseCustomEvent += HandleCustomEvent;
    

    Observe que a sintaxe anterior é nova no translation from VPE for Csharp 2.0.É exatamente equivalente para o translation from VPE for Csharp 1.0 sintaxe em que o delegado encapsulamento deve ser criado explicitamente, usando o new palavra-chave:

    publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);
    

    Também é possível adicionar um manipulador de eventos usando uma expressão lambda:

    public Form1()
    {
        InitializeComponent();
        // Use a lambda expression to define an event handler.
        this.Click += (s,e) => { MessageBox.Show(
           ((MouseEventArgs)e).Location.ToString());};
    }
    

    Para obter mais informações, consulte Como: Usar expressões lambda fora LINQ (guia de programação translation from VPE for Csharp).

Para inscrever-se em eventos usando um método anônimo

  • Se você não tiver que cancelar a inscrição para um evento posteriormente, você pode usar o operador de atribuição de adição (+=) para anexar um método anônimo do evento. O exemplo a seguir, suponha que um objeto chamado publisher possui um evento de chamada RaiseCustomEvent e se um CustomEventArgs classe também foi definido para executar algum tipo de informações de evento especializados. Observe que a classe assinante precisa de uma referência para publisher Para inscrever-se em seus eventos.

      publisher.RaiseCustomEvent += delegate(object o, CustomEventArgs e)
      {
        string s = o.ToString() + " " + e.ToString();
        Console.WriteLine(s);
      };
    

    É importante observar que você não pode cancelar com com facilidade inscrição de um evento se você usou um anônimo função para inscrever-se nele.Para cancelar a inscrição neste cenário, é necessário entrar com o código em que você assinar o evento, armazenar o método anônimo em uma variável do delegado e, em seguida, adicione o delegado ao evento.Em geral, recomendamos que você não use anônimo funções para assinar eventos se será necessário cancelar a inscrição de evento em algum momento posterior em seu código.Para obter mais informações sobre funções anônimas, consulte Funções anônimo (guia de programação translation from VPE for Csharp).

Cancelamento da inscrição

Para impedir que seu manipulador de eventos que está sendo chamado quando o evento é gerado, sua inscrição do evento.Para evitar vazamentos de recurso, você deve cancelar a inscrição de eventos antes de você descartar um objeto do assinante.Até que você cancelar a inscrição de um evento, o delegado multicast que fica no evento de publicação o objeto tem uma referência ao delegado que encapsula o manipulador de eventos do assinante.sistema autônomo longo sistema autônomo as publicação suspensões de objeto de referência, coleta de lixo não excluirá o objeto do assinante.

Para cancelar a inscrição de um evento

  • Use o operador de atribuição de subtração (-=) para cancelar a inscrição de um evento:

      publisher.RaiseCustomEvent -= HandleCustomEvent;
    

    Quando todos os assinantes têm não inscrito em um evento, a ocorrência de eventos na classe publicador é definida como null.

Consulte também

Tarefas

Como: Publicar eventos que estão em conformidade com diretrizes do .NET estrutura (guia de programação translation from VPE for Csharp)

Referência

Eventos (Guia de programação do C#)

evento (translation from VPE for Csharp Reference)

-= Operador (translation from VPE for Csharp Reference)

+= Operador (translation from VPE for Csharp Reference)