Na szybko rzuciłem okiem.
To co zauważyłem:
void BackgroundThreat()
{
while (true)
{
Thread.Sleep(1000);
WeatherData = _weatherConnection.GetWeatherData();
OnPropertyChanged("");
}
}
Nazwa metody nic nie mówi, kod w tej metodzie pobiera jedynie co sekundę dane pogodowe(w jakim celu tak często?). Czemu więc taka nazwa?
Thread.Sleep()
słabo, bardzo słabo. Blokujesz na sekundę cały wątek, który został uruchomiony(co gorsze za pomocą gołego Thread
ale o tym zaraz) tylko do pobierania danych. Czemu nie użyłeś await Task.Delay(1000)
, albo timera, który co sekundę będzie wywoływał tę metodę.
Zresztą, gdybyś to pobieranie danych pogodowych zrobił asynchronicznie, to nie potrzebny byłby żaden nowy wątek, bo GUI nie byłoby blokowane podczas pobierania danych.
No i literówka w nazwie, "threat" ma trochę inne znaczenie :P
new Thread(BackgroundThreat) {IsBackground = true}.Start();
Czemu goły Thread
?
Od wprowadzenia .NET Framework 4.0, czyli od 5 lat, zalecanym sposobem tworzenia wielowątkowego i równoległego kodu jest TPL.
for (int i = 0; i < 37; i++)
Jakieś magiczne liczby, nie wiadomo dlaczego akurat 37.