PplWare Mobile

Tutorial C# – Delegates e Eventos…

                                    
                                

Este artigo tem mais de um ano


Autor: Pplware


  1. José Romão says:

    Bom Tutorial.. confesso que havia uma ou 2 coisas que me passavam ao lado e agora fiquei mais iluminado.

    continua o bom trabalho Henrique

  2. Agustin Gomes says:

    muito bom o tutorial,

    num futuro, até podem fazer tutoriais de outras linguagens

  3. Nastase says:

    Sinceramente só vejo vantagem nos delegates quando queremos criar “macros” e correr várias funções encadeadas. Porque para correr uma, a menos que seja assíncrona (e mm assim há outras soluções), não vejo grande vantagem.

    Quanto ao tuto, bom trabalho!

    [ http://www.revolucaodigital.net ]

  4. Uso as delegates para uma 2ª thread modificar labels na thread mãe que tem o GUI. Só mais tarde descobri que com as backgroundworkers também dava.

    Bom tutorial Henrique 😉

  5. Henrique Graça says:

    @Nastase

    Ficaste com a ideia errada de delegates. Os delegates não servem apenas para chamar uma função que já conheces, mas sim para encapsular apontadores para funções que conheces ou não(criados em runtime), dizeres isso é o mesmo que dizeres que todo o conceito das linguagens de programação está errada, principalmente C++ que usa e abusa de pointers. O que são delegates? São a versão melhorada dos antigos pointers, porque são typeSafe,Object Oriented e seguros, ou seja, todos os erros que existiam antigamente deixaram de existir.
    Sem delegates não poderiam existir eventos, porque os eventos chamam funções que não conhecem, esta é a sua principal função.
    E agora com os delegates anónimos (parece um grupo) 🙂 ainda estão melhores.

  6. carlos rajas says:

    Altos papos…quem sabe opina, quem não, como eu, só olhar e aprender…valeu 😉

    http://www.delaorden.wordpress.com

  7. José Romão says:

    @Nastase,

    Uso bastante da maneira que o filipe disse.. visto que os delegates sao a unica maneira de mexeres em controlos de outras threads.. em meu uso pessoal é essencialmente para MultiThreading. 😛

  8. Psyco says:

    Bom tutorial. Mais algumas dicas não faz mal a ninguem.

    b1bpt@fiambre.dsi.uminho.pt

  9. Nastase says:

    @Henrique, @José

    Obrigado pelo esclarecimento! Com certeza que irei olhar com um pouco mais de atenção a tudo isto. E os exemplos que citam são altamente interessantes 😉

    [ http://www.revolucaodigital.net ]

  10. Nuno says:

    Nas linguagens orientadas a objectos não existem funções mas sim métodos. Parabéns pelo tutorial.

  11. mush says:

    mto bom
    mas imagens, para a proxima, em formato png. por favor

  12. Paco says:

    Sou habitualmente leitor assíduo destes mini tutoriais e desta vez penso que a clareza ficou um pouco a desejar. Talvez uns exemplos de aplicação tivessem permitido apresentar melhor as ideias. De qualquer modo elogio a escolha do tema que levanta a curiosidade para o seu estudo.
    Paco

  13. Toni Almeida says:

    Mal tenha tempo começo a cultivar-me com este tutorial 😀
    Mais uma vez obrigado Henrique Graça Graça 😛

  14. Joel says:

    Boa noite
    Costumo ler estes mini tutoriais e neste caso despertou-me mais interesse pois poderá estar relacionado com um problema que estou a ter numa aplicação que estou a desenvolver…
    Alguém me sabe dizer como passo informação para vários url’s de uma só vez?

  15. Henrique Graça says:

    @ Paco
    Compreendo-te perfeitamente mas confesso que a matéria era muita e não tinha muito tempo, foi um pouco a abrir. Mas obrigado pelo comentário.

    @ Joel
    Não percebi a questão podes reformular?

  16. Joel says:

    basicamente o que eu pretendo é abrir 3 páginas de uma só vez (embora seja o mesmo destino, pretendo enviar diferente informação no url) e acho que tal não é possível com o simples Response.Redirect(“url”) pois termina o processamento da página e passa para a página indicada

  17. Shogun says:

    @Henrique Graça

    Eis, ainda n tive tempo de ler este tutorial, mas vou colocar uma duvida pode ser que saibas, estou a ter um memory leak num programa que fiz,ate onde deixei chegou aos 460 MB de ram :/ tou a usar backgroundworker para fazer multithreading, dentro do backgroundworker executo um ciclo com 34000 iteracoes, la dentro n crio novas threads, e de 100 em 100 inicializo td o k tenho em memoria e guardo em disco o k tinha, sabes onde pode tar o problema?

  18. Nastase says:

    @Shogun
    verifica se os objectos que utilizas têm o método Dispose(). Se tiverem é imprescindível que o utilizes. Nesses casos apenas reinicializar as variáveis não chega para que o garbage collector passe e limpe a memória. É necessário indicar explicitamente que aqueles recursos podem ser libertados.

    [ http://www.revolucaodigital.net ]

  19. Nastase says:

    Porque é que a minha resposta ao Shogun não foi publicada??

  20. Shogun says:

    @Nastase

    Pois tive a ver isso e n têm, o k eu tou a fazer é pegar num determinado site que usa querystrings nas quais passa um id k no meu caso e 1 a 34000, saco o site faco parse do site e saco a informacao k me interessa, n percebo e pk e k me acontece isto se eu faco iterativamente o parse de cada um dos sites e inclusive tenho um sleep para libertar uma beca do processador.vou deixar isto a correr e ver o k acontece,pode ser k amanha tenha explodido 😛

  21. Shogun says:

    So para informacao:

    O tal programa rebentou, out of memory, foi a excepcao k lancou, tenho msm k ver o k se esta a passar,a unica hipotese k vejo e ele estar a criar threads paralelas e abrir streams k n devia e depois n os fexa.

  22. Henrique Graça says:

    @ Shogun

    Uma coisa que podes tentar é forçar o Garbage Collector tens como deves já saber dois metodos para isso o GC.Collect() que vai correr todos os finalizers num thread diferente, ou o GC.WaitForPendingFinalizers() este é sincrono e só tens resposta quando são todos terminados.
    Uma outra coisa que podes fazer é remover todos os event handlers(-=) dos teus controlos que não necessitem disso, por alguma razão isso ocupa memória. Outra coisa certifica-te sempre se metes os objectos a null.

    Um bom programa para controlar isso é o ANTS profiler podes sacar um trial.
    Com este programa podes ver onde estão os problemas de memória da tua aplicação, basta dizer qual é o executável para monitorizar.

    http://www.red-gate.com/Products/ants_profiler/index.htm

    Espero que isto ajude e tenhas sucesso.

  23. José Romão says:

    @shogun tens outra opçao excepcionalmente simples.. que é tudo o que declaras quando nao precisas no final da funçao fazer “= null”

    no final de cada funçao limpa todos os objectos que sao locais igualando a null;

    simples mas eficaz.

  24. Sou iniciante e assim mesmo ficou bem claro para mim, Valeu está de Parabens

  25. Rodrigo says:

    Henrique pá…Já mostraste isto ao Neves? lol! Abraço!

  26. Rui Dias says:

    Obrigado pelo artigo; como principiante em C#, achei-o muito útil e informativo.
    No entanto, tenho um reparo a fazer: deveria rever o seu Português. Tem muitos erros de sintaxe e frases mal construídas. É uma pena que a forma desvalorize o conteúdo. Fica a sugestão de melhoria.

    Cumprimentos
    Rui Dias

  27. António Silva says:

    Parabéns

  28. Renan says:

    é bem antigo esse tutorial e muito interessante,mas se autor puder me explicar como consigo fazer chamar um evento dentro de um outro evento ficaria muito grato!!! 🙂

  29. Marcos Curcio Gomes says:

    Mt bom o artigo. Eu tbm estava meio perdido em relação à delegates e eventos. Ajudou bastante!

  30. Ana Paula says:

    Mtooo bom tutorial

  31. Daniel says:

    Vlw ae kra… Esta tentando setar o label de statusBar de um form aberto no inicio do sistema, la de dentro dos arquivos abertos e agora foi. Vlw

  32. Marlon says:

    Teria como eu passar um delegate como argumento em um evento?

  33. breiricofobala says:

    Muito bom, obrigado pelo compartilhamento.
    ajudou muito na compreensão.

Deixe um comentário

O seu endereço de email não será publicado.

You may use these HTML tags and attributes: <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Aviso: Todo e qualquer texto publicado na internet através deste sistema não reflete, necessariamente, a opinião deste site ou do(s) seu(s) autor(es). Os comentários publicados através deste sistema são de exclusiva e integral responsabilidade e autoria dos leitores que dele fizerem uso. A administração deste site reserva-se, desde já, no direito de excluir comentários e textos que julgar ofensivos, difamatórios, caluniosos, preconceituosos ou de alguma forma prejudiciais a terceiros. Textos de caráter promocional ou inseridos no sistema sem a devida identificação do seu autor (nome completo e endereço válido de email) também poderão ser excluídos.