Wątek blokujący aplikację przy odbiorze z portu COM

0

Witam,
Mam taki oto kod tworzący wątek:

private void button1_Click(object sender, EventArgs e)
        {
            Thread watek = new Thread(new ThreadStart(operacja));
            watek.Start(); 
        }
private delegate void Deleg();
      
        public void operacja()
        {
            portCOM.Open();
            for (; ;)
            {

                Thread.Sleep(1000);
                if (listBox1.InvokeRequired)
                {
                    listBox1.Invoke((Deleg)delegate
                    {
                        listBox1.Items.Add(portCOM.ReadLine());
                        listBox1.SelectedIndex = listBox1.Items.Count - 1;
                        listBox1.SelectedIndex = -1;
                    });
                }
            }
        }

i wszystko pięknie działa, dopóki przez port przychodzą jakieś dane. Kiedy dane nie są wysyłane, aplikacja się zawiesza, a kiedy znowu zacznę je wysyłać, to się "odwiesza". Jednak kiedy się "odwiesi", nie działa już tak płynnie, np. kiedy chcę przesunąć okno, to ma opóźnienia.
Może mi ktoś wytłumaczyć, dla czego tak się dzieje, i jak temu zapobiec? Z góry dziękuję za odpowiedź
Pozdrawiam

0

W tym kodzie w ogóle nie sprawdzasz, czy na porcie jest coś do odebrania. Tzn nigdy sam sie tym nie zajmowałem, ale logicznie byłoby gdybyś zrobił while'a z warunkiem dla obecności jakiś danych na COM, i gdy Count > 0 to sprawdzasz czy InvokeRequired, inaczej będzie się ciąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1