Cześć wszystkim, chciałem zrobić program, który odbiera dane o temperaturze (np. z arduino) i rysuje z nich na bieżąco wykres. Program robi wykres, ale zawiesza się przy tym i nie można nic więcej robić. Chciałem wrzucić to rysowanie wykresu do osobnego wątku ale niestety mam z tym problem :( Jestem początkujący jeśli chodzi o programowanie, dlatego jeśli ktoś ma pomysł dlaczego to nie działa to będę wdzięczny za pomoc :) Błąd jest w linii Thread watek = new Thread(wykres_LadowanieDanych); - dlaczego nie można dodać tej metody do Thread ?
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Thread watek = new Thread(wykres_LadowanieDanych);
watek.Start();
}
public void wykres_LadowanieDanych(object sender, RoutedEventArgs e)
{
LineSeries temperatura = new LineSeries() { DataLabels = false, Values = new ChartValues<int>() };
Random r = new Random();
Axis x = new Axis();
Axis y = new Axis();
temperatura.Stroke = Brushes.Red;
temperatura.Fill = Brushes.Transparent;
x.Title = "Czas pomiaru";
y.Title = "Temperatura powietrza";
y.MaxValue = 50;
y.MinValue = -10;
x.MaxValue = 50;
wykres_temperatura.AxisX.Add(x);
wykres_temperatura.AxisY.Add(y);
wykres_temperatura.Series.Add(temperatura);
List<string> etykiety = new List<string>();
x.Labels = etykiety;
while (IsVisible)
{
if (temperatura.Values.Count >= 50)
{
temperatura.Values.Remove(temperatura.Values[0]);
etykiety.Remove(etykiety[0]);
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(delegate { }));
}
if (temperatura.Values.Count < 50)
{
temperatura.Values.Add(r.Next(1, 30));
etykiety.Add(DateTime.UtcNow.ToString("HH:mm:ss"));
Thread.Sleep(6000);
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(delegate { }));
}
}
}