Próbuję stworzyć wątek, który nie zablokuje mi interfejsu (windowsforms) jednocześnie uaktualniając w nim kontrolki. Obecnie dzieje się tak, że na interfejsie nie da się teoretycznie niczego nacisnąć, ale jak nacisnę i poczekam to po jakimś czasie (kilku operacjach czytania) kliknięcie w interfejs zadziała, tak samo z przesunięciem formy.
Przybliżona zasada działania:
Przycisk Start => otworzenie void start => stworzenie nowego watku dla thr (watek2) thr.isbackground = true i thr.start() => kody co się dzieje dalej poniżej. walczę z tym kilka dni już, próbowałem dawać INVOKE wszędzie gdzie tylko można na różne sposoby, pewnie już za dużo tego namieszałem.
void watek2()
{
BeginInvoke (new Action(
() =>
{
czytanie();
chart.Invoke(new Action(delegate ()
{
chart.Series["OD"].Points.AddXY(DateTime.Now.ToLongTimeString(),c_data);
if (chart.Series["OD"].Points.Count>119)
{
chart.Series["OD"].Points.RemoveAt(0);
chart.ResetAutoValues();
}
}));
if (b_start.Enabled == false)
{
watek2();
}
}
));
}
void czytanie()
{
BeginInvoke (new Action(
() =>
{
Action akcja = () => z_data = sp_1.ReadLine();
this.BeginInvoke(akcja);
Action akcja2 = () => rtb_1.Text = z_data;
this.BeginInvoke(akcja2);
if (z_data.StartsWith("g210"))
{
z_data2 = z_data.Split(new char[] {' '});
if (z_data2[1].StartsWith("E"))
{}
else
{
c_data=Convert.ToDouble(z_data2[1], System.Globalization.CultureInfo.InvariantCulture);
}
}
}
));
}
Ktoś ma pomysł co robię źle? Mam problem z obsługą wątków jeżeli mają aktualizować kontrolki a nie tylko pobierać z nich dane.