Evite erros de thread cruzado: atualize com segurança os elementos da interface do usuário de threads não ui
Ao interagir com elementos da interface do usuário de threads não UI (como threads gerados pelo recebimento de eventos de dados de porta serial), os problemas de segurança do thread devem ser tratados para evitar erros de thread cruzado.
No código C#, o erro "Operação de thread cruzado é inválida: controle de acesso 'textbox1' de um encadeamento que não seja o thread que criou o controle 'textbox1'" ocorre porque o thread da interface do usuário possui o controle do TextBox1 e o acesso a ele De outro tópico, causará conflitos de associação de threads.
Para resolver esse problema, um agendador deve ser usado para permitir que os threads apropriados (geralmente threads da interface do usuário) acessem elementos da interface do usuário. Nesse caso, os métodos delegados e chamados podem ser usados para garantir o acesso à segura da linha:
delegate void SetTextCallback(string text);
private void SetText(string text)
{
if (this.textBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.textBox1.Text = text;
}
}
!
private void serialport1_datareceived (remetente do objeto, System.io.ports.serialdatareceiveEventargs e) { txt = serialport1.readExisting (). ToString (); SetText (txt.toString ()); }
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
txt = serialPort1.ReadExisting().ToString();
SetText(txt.ToString());
}
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3