none
Criar Evento Personalizado - C# RRS feed

  • Pergunta

  • Ola estou com um problema... imagine a seguinte situação......

    Imagine que voce tem uma classe Carro, esta classe tem varios atributos como numero de portas, motor, quantidade de combustivel, e etc....

    Agora Imagine que voce tem uma Classe chamada ControleCarro, esta classe monitora todo o funcionamento do carro, pneus , combustivel etc...

    A classe ControleCarro, fica monitorando todo o comportamento do carro, atraves de um Timer.

    Agora imagina a seguinte situação a classe ControleCarro detecta que o tanque de combustivel chegou no reserva. Eu gostaria de criar um evento nessa classe porem gostaria de ouvir este evento na classe Carro, tipo assim

    Public class Carro

    {

          ControleCarro ctrlCarro = new ControleCarro();

          //Esse é o evento que desejo criar

         ctrlCarro.Monitor += new EventHandle(MeuMetodo);

     

        private void MeuMetodo()

       {

         // Aqui vou tratar o evento detectado

       }

    }

     

    public class ControleCarro

    {

       Como eu crio e como eu disparo o evento aki, para ser ouvido em toda classe que instanciar essa classe

    }

     

    Alguem sabe como fazer isso?????

    terça-feira, 8 de fevereiro de 2011 15:53

Respostas

  • Amigo, criar um evento é algo bem simples, veja um exemplo abaixo baseado mais ou menos no seu cenario, uma classe que representa um tanque de gasolina que você define a quantidade de combustivel dentro dela e quando se inicia o motor a gasolina começa a ser consumida até que zera o tanque e avisa ao chamador pelo evento:

    public class TanqueGasolina
    {
      int qtdTanque = 0;
      public TanqueGasolina(int qtdGasolina)
      {
        this.qtdTanque = qtdGasolina;
      }
    
      //Realiza a condição interna para que a ação ocorra
      public void Ligar()
      {
        while (true)
        {
          System.Threading.Thread.Sleep(1000);
          qtdTanque--;
          if (qtdTanque.Equals(0))
          {
            this.TanqueVazio();
            break;
          }
            
        }
      }
      //Cria um um Delegate
      public delegate void EventoCarro();
      //Cria um evento
      public event EventoCarro TanqueVazio; 
    }
    

    você pode chamar a classe assim:

    TanqueGasolina tanque = new TanqueGasolina(10);
        tanque.TanqueVazio += new TanqueGasolina.EventoCarro(tanque_TanqueVazio);
        tanque.Ligar();
    
      }
    
      void tanque_TanqueVazio()
      {
        Console.WriteLine("Sem Gasolina");
      }
    
    este link tambem é interessante: http://www.osix.net/modules/article/?id=685


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marcado como Resposta dudu100 terça-feira, 8 de fevereiro de 2011 16:19
    terça-feira, 8 de fevereiro de 2011 16:08
    Moderador

Todas as Respostas

  • Amigo, criar um evento é algo bem simples, veja um exemplo abaixo baseado mais ou menos no seu cenario, uma classe que representa um tanque de gasolina que você define a quantidade de combustivel dentro dela e quando se inicia o motor a gasolina começa a ser consumida até que zera o tanque e avisa ao chamador pelo evento:

    public class TanqueGasolina
    {
      int qtdTanque = 0;
      public TanqueGasolina(int qtdGasolina)
      {
        this.qtdTanque = qtdGasolina;
      }
    
      //Realiza a condição interna para que a ação ocorra
      public void Ligar()
      {
        while (true)
        {
          System.Threading.Thread.Sleep(1000);
          qtdTanque--;
          if (qtdTanque.Equals(0))
          {
            this.TanqueVazio();
            break;
          }
            
        }
      }
      //Cria um um Delegate
      public delegate void EventoCarro();
      //Cria um evento
      public event EventoCarro TanqueVazio; 
    }
    

    você pode chamar a classe assim:

    TanqueGasolina tanque = new TanqueGasolina(10);
        tanque.TanqueVazio += new TanqueGasolina.EventoCarro(tanque_TanqueVazio);
        tanque.Ligar();
    
      }
    
      void tanque_TanqueVazio()
      {
        Console.WriteLine("Sem Gasolina");
      }
    
    este link tambem é interessante: http://www.osix.net/modules/article/?id=685


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marcado como Resposta dudu100 terça-feira, 8 de fevereiro de 2011 16:19
    terça-feira, 8 de fevereiro de 2011 16:08
    Moderador
  • Valeu Olavo deu tudo certo é bem isso mesmo que eu estava procurando. Valeuuuuu MSDN....
    • Marcado como Resposta dudu100 terça-feira, 8 de fevereiro de 2011 16:19
    • Não Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 18 de fevereiro de 2011 13:02
    • Sugerido como Resposta Yuri Cavalcante quarta-feira, 17 de dezembro de 2014 11:43
    terça-feira, 8 de fevereiro de 2011 16:18