none
Ajuda com uso do "using" para fechar evento RRS feed

  • Pergunta

  • Boa dia Amigos, eu estou criando um sistema de verificação pela entrada do serial port, tudo funciona perfeitamente, porém o evento myport.ReadExisting(), continua executando mesmo quando mudo de form, como faço para fecha-lo depois de executado com o "using"? Já tentei de várias formas mas não consigo adaptar meu código. Segue a baixo um trecho:

    namespace EntradaFinalCliente
    {
        
    
        public partial class ConsultaSerial : Form
        {
            
            string SerialString;
            private SerialPort myport;
            
            
            public ConsultaSerial()
          {
                InitializeComponent();
                abrirSerial();
                lerDados();
            }
    
            public void abrirSerial()
            {
                
                myport = new SerialPort(); 
                myport.BaudRate = 9600;
                myport.PortName = SerialPort1; 
                myport.DataReceived += myport_DataReceived;
               
            }
    
            private void lerDados()
            {
    
                if (myport.IsOpen == false) 
                {
                    try
                    {
                        myport.Open(); 
                    }
                    catch
                    {
                        return;
                    }
                    
                }
               
            }
    
            private void myport_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                Thread.Sleep(100); 
                SerialString = myport.ReadExisting();
                this.Invoke(new EventHandler(Analisa));
                
            }
    
            private void Analisa(object sender, EventArgs e)
            {
                checarSerial();
                
            }
    Obrigado Antecipadamente!


    sábado, 5 de setembro de 2015 12:22

Respostas

  • A solução era simples apenas mudei o a chamada Invoke para BeginInvoke

    obrigado a todos pelas respostas!


    Roberto Gomez

    • Marcado como Resposta robertgomez2 terça-feira, 15 de setembro de 2015 22:46
    terça-feira, 15 de setembro de 2015 22:46

Todas as Respostas

  • Boa tarde,

    Pelo que entendi, ao fechar o form o seu serialport continua rodando, é isso?

    você chama o form com show() ou showdialo()?

    Se for com ShowDialog() da pra tentar isso:

    ~ConsultaSerial()  //Assim como existe um construtor existe um "desconstrutor", é só fechar a porta serial nele
    {
       if (myPort != null)
       {
          if (myPort.IsOpen)
             myPort.Close();
       }
    }

    • Marcado como Resposta Marcos SJ segunda-feira, 7 de setembro de 2015 13:32
    • Não Marcado como Resposta robertgomez2 segunda-feira, 7 de setembro de 2015 18:53
    sábado, 5 de setembro de 2015 16:56
  • Boa tarde Marcos, obrigado pela dica eu chamo com show(), será que existe alguma outra forma?
    sábado, 5 de setembro de 2015 17:27
  • Boa tarde,

    Então, se chama no Show() o form não é destruído sempre, se você clicar fora (ex: form principal) o form atual vai ficar "por baixo".

    Nos eventos do form, mais precisamente nos eventos de foco (grupo "Focus"),

    existe um evento que é disparado  quando o form perde o foco "Deactivate", ou seja, ela é disparada justamente quando o seu form fica "por baixo", tenta jogar esse código de fechar a COM ao desativar.


      if (myPort != null)
       {
          if (myPort.IsOpen)
             myPort.Close();
       }
    • Editado Marcos Gerene domingo, 6 de setembro de 2015 13:53
    • Marcado como Resposta Marcos SJ segunda-feira, 7 de setembro de 2015 13:32
    • Não Marcado como Resposta robertgomez2 segunda-feira, 7 de setembro de 2015 18:52
    domingo, 6 de setembro de 2015 13:52
  • Na verdade eu não tenho problemas em fechar a conexão, meu problema é fechar o método myPort.Read.existing(); que continua executando quando mudo de form e abro uma nova conexão com a porta serial, é como se esse método  ficasse executando em segundo plano mesmo com a conexão fechada, e quando ela é aberta novamente por outro form ele reaparece, eu quero que ele para quando o form for fechado.

    Mas obrigado pela atenção e respostas!

    Abraços

    segunda-feira, 7 de setembro de 2015 13:07
  • Alguém?
    segunda-feira, 7 de setembro de 2015 18:53
  • No evento FormClosing do formulário, tenta remover o evento mas antes feche a porta do myport.

    myport.DataReceived -= myport_DataReceived;


    Bruno Ferreira de Souza
    MVP - Microsoft Valuable Professional
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro

    segunda-feira, 7 de setembro de 2015 19:19
  • A Porta não fecha depois que o myport.DataReceived inicia, tenho erro de" acesso não autorizado a porta COM1"
    segunda-feira, 7 de setembro de 2015 21:31
  • Olá robertgomez2,

    Tudo bem?

    Conseguiu encontrar alguma outra solução para o seu problema. Caso ainda não tenha encontrado uma solução por gentileza nos informe pois tentaremos outras abordagens para tentar te auxiliar.

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 14 de setembro de 2015 19:25
  • A solução era simples apenas mudei o a chamada Invoke para BeginInvoke

    obrigado a todos pelas respostas!


    Roberto Gomez

    • Marcado como Resposta robertgomez2 terça-feira, 15 de setembro de 2015 22:46
    terça-feira, 15 de setembro de 2015 22:46