• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

killercode

[AJUDA] Wrapping de Eventos

1 mensagem neste tópico

Boas pessoal,

Tou a trabalhar num projecto em que tudo é abstracto e o mais reutilizavel possivel...

Foi-me pedido para fazer o seguinte:

Tenho varios eventhandlers(algumas dezenas) e tenho de fazer com que os eventos sejam thread safe...

Acontece que estar a mudar o codigo de todos os event handlers vai ser um pouco trabalhoso e susceptivel a bugs então a ideia encontrada seria fazer uma class com um wrapper para os eventos...

então a ideia seria, ao criar o event handler chamar a outra class que meta um lock a volta do event handler que pretendemos.

O codigo a seguir é a solução ideal para fazer os eventos thread safe... eu só quero implementar isto de modo a que isto integre todos os eventos da minha aplicação... sei que é rebuscado mas se tiverem sugestões aceito com todo o gosto... quando chegar a uma conclusão vou postar um tutorial para todos saberem como se faz pois penso que é uma class mt util

Ollhemos para o seguinte codigo:

/// <summary>
/// Delegate backing the SomeEvent event.
/// </summary>
SomeEventHandler someEvent;

/// <summary>
/// Lock for SomeEvent delegate access.
/// </summary>
readonly object someEventLock = new object();

/// <summary>
/// Description for the event
/// </summary>
public event SomeEventHandler SomeEvent
{
    add
    {
        lock (someEventLock)
        {
            someEvent += value; 
        }
    }
    remove
    {
        lock (someEventLock)
        {
            someEvent -= value;
        }
    }
}

/// <summary>
/// Raises the SomeEvent event
/// </summary>
protected virtual OnSomeEvent(EventArgs e)
{
    SomeEventHandler handler;
    lock (someEventLock)
    {
        handler = someEvent;
    }
    if (handler != null)
    {
        handler (this, e);
    }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora