Sugerir tradução
 
Outras sugestões:

progress indicator
Sem sugestões.
Clique para classificar e enviar comentários
MSDN
Biblioteca MSDN
Visual Studio 2008
Visual Studio
Visual C#
 Como: Assinar e cancelamento de ins...

  Ativar exibição de largura de banda baixa
Exibir Conteúdo: Lado a LadoExibir Conteúdo: Lado a Lado
Este conteúdo foi traduzido automaticamente e pode ser editado pelos membros da comunidade. Para melhorar a qualidade da tradução, clique no link Editar associado à frase que deseja modificar.
C# Programming Guide
How to: Subscribe to and Unsubscribe from Events (C# Programming Guide)

You subscribe to an event that is published by another class when you want to write custom code that is called when that event is raised. For example, you might subscribe to a button's click event in order to make your application do something useful when the user clicks the button.

To subscribe to events by using the Visual Studio IDE

  1. If you cannot see the Properties window, in Design view, right-click the form or control for which you want to create an event handler, and select Properties.

  2. On top of the Properties window, click the Events icon.

  3. Double-click the event that you want to create, for example the Load event.

    Visual C# creates an empty event handler method and adds it to your code. Alternatively you can add the code manually in Code view. For example, the following lines of code declare an event handler method that will be called when the Form class raises the Load event.

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

    The line of code that is that is required to subscribe to the event is also automatically generated in the InitializeComponent method in the Form1.Designer.cs file in your project. It resembles this:

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

To subscribe to events programmatically

  1. Define an event handler method whose signature matches the delegate signature for the event. For example, if the event is based on the EventHandler delegate type, the following code represents the method stub:

      void HandleCustomEvent(object sender, CustomEventArgs a)
      {
         // Do something useful here.
      }
  2. Use the addition assignment operator (+=) to attach your event handler to the event. In the following example, assume that an object named publisher has an event named RaiseCustomEvent. Note that the subscriber class needs a reference to the publisher class in order to subscribe to its events.

    publisher.RaiseCustomEvent += HandleCustomEvent;

    Note that the previous syntax is new in C# 2.0. It is exactly equivalent to the C# 1.0 syntax in which the encapsulating delegate must be explicitly created by using the new keyword:

    publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);

    An event handler can also be added by using a lambda expression:

    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 How to: Use Lambda Expressions Outside LINQ (C# Programming Guide).

To subscribe to events by using an anonymous method

  • If you will not have to unsubscribe to an event later, you can use the addition assignment operator (+=) to attach an anonymous method to the event. In the following example, assume that an object named publisher has an event named RaiseCustomEvent and that a CustomEventArgs class has also been defined to carry some kind of specialized event information. Note that the subscriber class needs a reference to publisher in order to subscribe to its events.

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

    It is important to notice that you cannot easily unsubscribe from an event if you used an anonymous function to subscribe to it. To unsubscribe in this scenario, it is necessary to go back to the code where you subscribe to the event, store the anonymous method in a delegate variable, and then add the delegate to the event. In general, we recommend that you do not use anonymous functions to subscribe to events if you will have to unsubscribe from the event at some later point in your code. For more information about anonymous functions, see Anonymous Functions (C# Programming Guide).

To prevent your event handler from being invoked when the event is raised, unsubscribe from the event. In order to prevent resource leaks, you should unsubscribe from events before you dispose of a subscriber object. Until you unsubscribe from an event, the multicast delegate that underlies the event in the publishing object has a reference to the delegate that encapsulates the subscriber's event handler. As long as the publishing object holds that reference, garbage collection will not delete your subscriber object.

To unsubscribe from an event

  • Use the subtraction assignment operator (-=) to unsubscribe from an event:

      publisher.RaiseCustomEvent -= HandleCustomEvent;

    When all subscribers have unsubscribed from an event, the event instance in the publisher class is set to null.

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#).

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.

Conteúdo da Comunidade   O que é Conteúdo da Comunidade?
Adicionar novo conteúdo RSS  Anotações
Processing
© 2009 Microsoft Corporation. Todos os direitos reservados. Termos de Uso  |  Marcas Comerciais  |  Política de Privacidade
Page view tracker