Visual C# ProgressBar + String

Programação C em geral

Moderadores: 51, guest2003

Visual C# ProgressBar + String

Mensagempor wandersonrainer » 20 Mar 2012 19:30

Olá a todos,

estou tentando inserir o valor de uma string em um ProgressBar no Visual C#. A string possui o valor de uma recepção serial.

Código: Selecionar todos
RxString = serialPort1.ReadExisting();


que está dentro do evento serialPort1_DataReceived.
Os valores da string apresentados em textBox fica sempre corretos, porém, ao converter o valor para variar uma ProgressBar, os valores da ProgressBar varia bastante:

Código: Selecionar todos
progressBar1.Value = Convert.ToInt32(RxString);


Alguma sugestão?

Obrigado.
wandersonrainer
Bit
 
Mensagens: 31
Registrado em: 09 Abr 2007 17:00

Re: Visual C# ProgressBar + String

Mensagempor andre_luis » 20 Mar 2012 22:43

Qual é a magnitude dos valores recebidos, e qual é o tamanho configurado do progressbar ?


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor wandersonrainer » 21 Mar 2012 09:23

Os valores recebidos variam de 0 a 1023 (conversão A/D de 10 bits proveniente de um MCU). O progressbar também foi configurado como 0 (mínimo) e 1023 (máximo).
Os valores recebidos (de 0 a 1023) são apresentados normalmente em textbox, porém, o progressbar acompanha o valor do textbox mas de forma intermitente o valor varia de forma brusca.
wandersonrainer
Bit
 
Mensagens: 31
Registrado em: 09 Abr 2007 17:00

Mensagempor andre_luis » 21 Mar 2012 21:38

No C++ Borland Builder, há uma função chamada processmessages(), cuja função é sincronizar as funções.

Procura ver se no C# tem algo parecido.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor chipselect » 25 Mar 2012 23:03

Em c#, o equivalente mais próximo de "processMessages()" é Application.DoEvents(), mas não se recomenda usar essas coisas...

Acho que o comando
progressBar1.Value = Convert.ToInt32(RxString);
é susceptível a falhas e deve-se tratar as exceções FormatException e OverFlowException, mesmo que os valores do AD só vão até 1023, pois você tem o problema de possível lixo na serial, além de ela ser assíncrona, ou seja, na hora que você efetua o comando de leitura, pode ser que não tenha recebido todo o seu pacote, ter recebido um pacote e um pedaço do próximo e etc.

Um problema intermitente que pode vir a ocorrer é quando RxString contém algo que não é bem um número, quando na eventualidade de a serial ter recebido lixo, ponto em que a conversão gera uma exceção e o dotnet sacana simplesmente aborta o laço da thread sem te falar nada, já que não tem o try - catch ali pra pegar o problema.

Uma vez que você não postou o trecho de código completo, essas afirmativas acimas são apenas especulações.

Talvez no texbox a variação seja tão rápida que você não perceba sua variação, coloque um log em cima disso para ver o que você está processando ao receber os dados pela serial, se não tiver nenhum ai, use o velho Console.WriteLine(RxString) mesmo toda vez que lê na serial, pelo menos vai ter um histórico do que tá lendo e pode esclarecer o que está ocorrendo.

Se for possível, delimite o valor transmitido pela serial por caracteres especiais, formando um protocolo mínimo para melhorar a confiabilidade dos dados recebidos (stx-etx, o bom e velho \n como delimitador, etc)
chipselect
Word
 
Mensagens: 744
Registrado em: 16 Out 2006 18:50


Voltar para Visual C++/C/C++/C#

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x