none
Eventos Lambda RRS feed

  • Pergunta

  • Boa Tarde,

    Eu não sei como eu UNREGISTER um evento  em lambda. Porque eu conheço dois meios de capturar um evento segue abaixo.

     

    // isso REGISTER o evento. se eu estiver errado me corrija.
    PESSOA_CARRO_MARCA .OnGetMarcaCompleted += PESSOA_CARRO_MARCA_OnGetMarcaCompleted;
    void PESSOA_CARRO_MARCA_OnGetMarcaCompleted(object sender, EventArgs e)
           {
    // isso UNREGISTER o evento; a diferença ta no sinal de + e -
    PESSOA_CARRO_MARCA .OnGetMarcaCompleted -= PESSOA_CARRO_MARCA_OnGetMarcaCompleted;
           }

    mas quando eu uso o evento do jeito abaixo nao sei como dar um UNREGISTER. Alguem Sabe.???

    PESSOA_CARRO_MARCA .OnGetMarcaCompleted += (s, e) =>
      {
    // aqui seria o codigo para o UNREGISTER.
      };

    Se alguem puder me ajudar agradeço desde já.

    Obrigado a todos.
    • Editado Molinari quarta-feira, 24 de novembro de 2010 17:09 .
    quarta-feira, 24 de novembro de 2010 17:08

Respostas

  • Então eu (particularmente) não aconselho a usar lambda quando:

    - Eventos Estáticos

    - Objetos Instanciados que serão acessados por diversas classes

    - Quando por algum motivo vc prescisar remover a atribuição do metodo do evento

     

    Eu aconcelho a usar o Lambda quando:

    - No caso de objetos instaciando em contextos menores que um simples métodos

     

    Nos demais casos, fica ao gosto do programador... sigo essa metodologia tendo em vista sempre manter o sistema "graficamente" claro para o caso de outra pessoa precisar dar manutenção no mesmo.... usar lambda para coisas muito complexas dificulta um pouco a compreensão se vc não estiver acostumando ao programa em si....


    Eu não sou pago para postar aqui... faço simplesmente porque eu quero....
    • Sugerido como Resposta Ari C. RaimundoModerator quinta-feira, 25 de novembro de 2010 00:12
    • Marcado como Resposta Molinari quinta-feira, 25 de novembro de 2010 10:44
    quarta-feira, 24 de novembro de 2010 23:10
    Moderador

Todas as Respostas

  • Ola,

        Normalmente vc usa evento lambda, em propriedades dentro de um escopo especifico, como o de um metodo ou de um bloco try/cath po exemplo:

    try {
         var objeto = new TipoDaClasse();
         objeto.Evento += (s, e) { [...] }
         objeto.Metodo();
         [...]
    } catch {
    }

    se vc esta usando uma propriedade ou um field de uma classe que vai perdurar por uma escopo maior... entao vc usa ainda a atribuição de um metodo para o evento e não a equação lambda...

    public class TipoA {
         public TipoB tipoB { get; set; }

         public TipoA() {
              tipoB = new tipoB();
              tipoB.Evento += tipoB_Evento();
         }

         private void tipoB_Evento(...)  {}
    }

    Leve em consideração que o Lambda é feito para ajudar em casos especificos e não para substituir a forma de propragração de eventos.


    Eu não sou pago para postar aqui... faço simplesmente porque eu quero....
    quarta-feira, 24 de novembro de 2010 17:23
    Moderador
  • Obrigado Rui,

     

    Entao você aconcelha não usar uma sequencia de lambda? (EX:. um dentro do outro)?

     

     

    quarta-feira, 24 de novembro de 2010 19:57
  • Então eu (particularmente) não aconselho a usar lambda quando:

    - Eventos Estáticos

    - Objetos Instanciados que serão acessados por diversas classes

    - Quando por algum motivo vc prescisar remover a atribuição do metodo do evento

     

    Eu aconcelho a usar o Lambda quando:

    - No caso de objetos instaciando em contextos menores que um simples métodos

     

    Nos demais casos, fica ao gosto do programador... sigo essa metodologia tendo em vista sempre manter o sistema "graficamente" claro para o caso de outra pessoa precisar dar manutenção no mesmo.... usar lambda para coisas muito complexas dificulta um pouco a compreensão se vc não estiver acostumando ao programa em si....


    Eu não sou pago para postar aqui... faço simplesmente porque eu quero....
    • Sugerido como Resposta Ari C. RaimundoModerator quinta-feira, 25 de novembro de 2010 00:12
    • Marcado como Resposta Molinari quinta-feira, 25 de novembro de 2010 10:44
    quarta-feira, 24 de novembro de 2010 23:10
    Moderador
  • Rui, Obrigado

     

    Mais uma coisa, você tem um link ae para eu ver um exemplo de como organizar meu codigo com esses eventos sem o lambda, tipo uma separação por #REGION ou utiliza o evento no metodo acima e no metodo abaixo ja coloca o retorno do metodo?

    quinta-feira, 25 de novembro de 2010 11:11
  • Ah então... isso depende muito da metologia da empresa... pelo que eu entendi vc apenas quer um retorno de um metodo assincrono... mas não entendi o porque vc pretende "desregitrar" o metodo do evento...

    Eu particularmente trabalharia desta forma:

    public void CarregarMarcas() {
        var pessoaCarroMarca = PESSOA_CARRO_MARCA;
        if (pessoaCarroMarca != null) {
             pessoaCarroMarca.OnGetMarcaCompleted += (s, e) => {
                   dataGrid.DataSource = e.Result;
             };
            pessoaCarroMarca.GetMarcaAsync();
        }
    }

    Como "pessoaCarroMarca" esta dentro do escopo do metodo, ela vai deixa de "existir" ao termino da execução... não ficando atribuito o evento em "PESSOA_CARRO_MARCA"

     


    Eu não sou pago para postar aqui... faço simplesmente porque eu quero....
    quinta-feira, 25 de novembro de 2010 13:26
    Moderador
  • Entao, suponha que nesse metodo que voce fez  apos carregar esse dataGrid  voce queira  preencher mais um dataGrid e no completed do segundo voce queira

    mais um ... ae meus eventos se perde e nao sei o motivo(posso tar criando os eventos errados nao sei ou algo do tipo)...mas  entao se eu uso o register e o ungister ele passa legal por onde mandei passar..  talvez seja pq os metodos que eu to usando são Static ... como voce disse "nao usar lambda com static"...

     

    mas blz...

     

     

    quinta-feira, 25 de novembro de 2010 15:29
  • Ah... então.. metodos estaticos muda tudo :)

    Voce pode fazer algo mais ou menos assim:

    public class XOXOXOX {
         # Metodos Estaticos

         # Implementacao de Eventos Estaticos

         # Private Fields

         # Propriedades

        # Eventos

        # Construtores

        # Metodos Publicos

        # Metodos Privados

        # Metodos Protegidos
    }


    Eu não sou pago para postar aqui... faço simplesmente porque eu quero....
    quinta-feira, 25 de novembro de 2010 18:15
    Moderador
  • OK Rui,,, Brigadão

     

    Ta quase igual...

     

    t+

    quinta-feira, 25 de novembro de 2010 18:57