Dziwny problem, textBox

0

Dzień dobry, dziś napotkał mnie dziwny problem. Podczas programowania aplikacji zauważyłem że textBox wyświetla nowe dane dopiero gdy ruszam myszką po okienku, gdy przestane ruszać nie wyświetla nowych stringów. Nigdy nie spotkałem się z czymś taki. Wygląda to tak jakby nie odświeżał textBox gdy myszka stoi w miejscu. Macie jakiś pomysł co jest nie tak? Podrzucam kod, lecz chyba nie ma on zbyt wiele wspólnego z tym problemem.

 private void button1_Click(object sender, EventArgs e)
        {
            // String line;

            int speed = 9600;
            SerialPort sp = new SerialPort("COM9", speed);   // łączność

            System.IO.StreamReader odczyt_gcodu = new System.IO.StreamReader(@"C:\Users\test\Desktop\abcd.txt");

            for (int i = 0; i < 6; i++)
            {

                textBox3.Text = Convert.ToString(i);
                Thread.Sleep(5000);
                g_code_wysylanie = File.ReadLines(@"C:\Users\test\Desktop\abcd.txt").Skip(i).Take(1).First(); // odczyt linii i
                sp.Open(); // otwarcie portu

                textBox1.Text = g_code_wysylanie;   // wyswietlenie linii i textBox2

                sp.Write(g_code_wysylanie); // wyslanie do aduino linii i

                stan_odebrania = sp.ReadLine(); //  odebranie napisu z arduino
                sp.Close(); // zamknęcie portu
                textBox2.Text = stan_odebrania; // wyświetlenie napisu z arduino textbox1 

            }
        }

screenshot-20180423221713.png

Pozdrawiam

2
 private void button1_Click(object sender, EventArgs e)
        {
                ...
                Thread.Sleep(5000);
                ...
        }

Zawieszasz aplikację na 5 sekund a spodziewasz się że w tym czasie będzie cokolwiek robić.
Ruch myszki wywołuje przerwanie sprzętowe, które na czas obsługi eventu myszy najwyraźniej pozwala na odrysowanie okna w innym wątku (ewentualnie wewnątrz Sleepa).

Musisz sobie uzmysłowić, że póki trwa button1_Click, nic innego się w głównym wątku nie dzieje.

0

Chyba nie do końca zrozumiałeś mój problem. Przerwanie jest przed wyświetlaniem tekstu. Jest ono tam potrzebne ponieważ muszę wysyłać wiadomości na port w pewnych odstępach czasu. Nie oczekuje żadnych zmian w tym momencie gdy działa ten fragment kodu. Poza tym jeśli usunę to przerwanie to nie zmienia sytuacji, cały czas nic nie wyświetla mi w textbox jeżeli nie ruszam myszką. Od razu po tych przerwaniu jest polecenie wyświetlenia czego w textboxe i to się nie wykonuje jeżeli myszka stoi w miejscu. Problem jest gdzie indziej. Czy jest może jakaś funkcja lub cokolwiek innego co po wywołaniu odświeży textbox?

0

Poza tym te jest cały kod. W głównym wątku nic nie ma. Program opiera się tylko na tym przycisku i tych okienkach.

0

To raczej Ty nie zrozumiałeś odpowiedzi Azarien ;) nie na odwrót.

Spróbuj dać Application.DoEvents(); na samym końcu pętli.Jak nie zadziała możesz jeszcze przed tym wywołać metdoę Refresh na textboxach.

private void button1_Click(object sender, EventArgs e)
        {
            // String line;

            int speed = 9600;
            SerialPort sp = new SerialPort("COM9", speed);   // łączność

            System.IO.StreamReader odczyt_gcodu = new System.IO.StreamReader(@"C:\Users\test\Desktop\abcd.txt");

            for (int i = 0; i < 6; i++)
            {

                textBox3.Text = Convert.ToString(i);
                Thread.Sleep(5000);
                g_code_wysylanie = File.ReadLines(@"C:\Users\test\Desktop\abcd.txt").Skip(i).Take(1).First(); // odczyt linii i
                sp.Open(); // otwarcie portu

                textBox1.Text = g_code_wysylanie;   // wyswietlenie linii i textBox2

                sp.Write(g_code_wysylanie); // wyslanie do aduino linii i

                stan_odebrania = sp.ReadLine(); //  odebranie napisu z arduino
                sp.Close(); // zamknęcie portu
                textBox2.Text = stan_odebrania; // wyświetlenie napisu z arduino textbox1 

                textBox1.Refresh();
                textBox2.Refresh();
                Application.DoEvents();
            }
        }
0

Dziękuję za obydwie odpowiedzi. Faktycznie czytałem post jak byłem bardzo zmęczony i go nie zrozumiałem. Gdy wprowadzę zmiany w kodzie to dam znać czy działa.
Dziękuję i pozdrawiam

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