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
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 .
Na parte superior da janela Properties, clique no ícone de De eventos.
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.
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
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.
}
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.
Tarefas
Referência