Este é um conteúdo traduzido por máquina.
Guia de Programação C#
Como: Assinar e cancelamento de inscrição de eventos (Guia de programação C#)

Você se inscreve a um evento publicado por outra classe quando deseja escrever código personalizado que é invocado quando o evento acontece. Por exemplo, você pode se inscrever ao evento de clique de um botão para que sua aplicação faça algo de útil quando o usuário clica no botão.

Para assinar eventos usando a IDE do Visual Studio

  1. Se, você não pode vê janela Propriedades em Design exibir, clique com o botão direito do mouse no formulário ou Controlarar para o qual você deseja criar um manipulador de eventos e Selecionar Propriedades de .

  2. Na parte superior da janela Properties, clique no ícone de De eventos.

  3. Clique Duplo o evento que você deseja criar, por exemplo o evento Load.

    Visual C# cria um manipulador de eventos vazio e adiciona ao seu código. Alternativamente você pode adicionar o código manualmente no modo Code. Por exemplo, as linhas de código a seguir declaram um método de manipulação de evento que será chamado quando a classe Form invocar o evento Load.

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

    A linha de código que é necessária para se inscrever ao evento também é automaticamente gerada no método InitializeComponent no arquivo Form1.Designer.cs file no seu projeto. Se parece com isto:

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

Para assinar eventos por meio de programação

  1. Defina um método de manipulação de evento cuja assinatura esteja de acordo com a assinatura do delegate para o evento. Por exemplo, se o evento é baseado no tipo delegate EventHandler, o código a seguir representa o método:

      void HandleCustomEvent(object sender, CustomEventArgs a)
      {
         // Do something useful here.
      }
  2. Utilize um operador de adição e atribuição (+=) para conectar seu manipulador de evento ao evento. No exemplo a seguir, assuma que um objeto chamado publisher tem um evento chamado RaiseCustomEvent. Observe que a classe subscriber necessita de uma referência à classe publisher para se inscrever aos seus eventos.

    publisher.RaiseCustomEvent += HandleCustomEvent;

    Observe que a sintaze anterior é nova no C# 2.0. Ela é exatamente equivalente à sintaze do C# 1.0 na qual o delegate encapsulado deve ser explicitamente criado usando a palavra-chave new:

    publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);

    Um manipulador de eventos também pode ser adicionado 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());};
    }

    For more information, see Como: Usar expressões lambda externa LINQ (Guia de programação C#).

Para assinar eventos usando um método anônimo

  • Se você não tiver que cancelar a inscrição a um evento depois, você pode usar o operador de adição e atribuição (+=) para conectar um método anônimo ao evento. No exemplo a seguir, assuma que um objeto chamado publisher tem um evento chamado RaiseCustomEvent e que uma classe CustomEventArgs também foi definida para carregar algum tipo de informação especializado do evento. Observe que a classe subscriber necessita de uma referência a publisher para se inscrever aos 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 facilmente cancelar a inscrição a um evento se você utilizou uma função anônima para se inscrever. Para cancelar a inscrição neste cenário, é necessário voltar ao código onde você se inscreveu ao evento, armazenar o método anônimo numa variável delegate, e então adicionar o delegate ao evento. Em geral, recomendamos que você não use funções anônimas para se inscrever aos eventos se você tiver que cancelar a inscrição ao evento mais tarde no seu código. Para mais informações sobre funções anônimas, consulte Funções anônimas (guia de programação C#).

Unsubscribing

Para evitar que o manipulador de evento seja invocado quando o evento ocorre, cancele a inscrição ao evento. Para evitar vazamento de recursos, você deve cancelar a inscrição a eventos antes que você libere de um objeto assinante. Até que você cancele a inscrição a um evento, o delegate multicast que suporta o evento no objeto publicador tem uma referência ao delegate que encapsula o manipulador do evento no assinante. Enquanto o objeto publicador tiver aquela referência, a coleção de lixo (garbage collection) não irá excluir o objeto assinante.

Para cancelar a de um evento inscrição

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

      publisher.RaiseCustomEvent -= HandleCustomEvent;

    Quando Tudo assinantes tem unsubscribed de um evento, a instância de evento da classe dEditor é definida como null.

Consulte também

Tarefas

Referência

Marcas :


Page view tracker