Diskuze: Úprava listBoxu ze stejného vlákna
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Timer běží ve vlastním vlákně, takže musíš použít Invoke metodu.
Aha... Já s tím nemám zkušenosti. Prosím poradil by jsi mi jak to napsat? Potřebuji, aby se provedla metoda reload()
void casovac_Elapsed(object sender, ElapsedEventArgs e)
{
bool prazdno = _db.Seznam.Any();
if(prazdno)
{
foreach (Zaznam zaz in _db.Seznam)
{
_datum = DateTime.Now;
string datum1 = zaz.Datum.ToString("dd.MM.yyyy");
string datum2 = _datum.ToString("dd.MM.yyyy");
if (datum1 == datum2 && !zaz.Zobrazeno)
{
zaz.Zobrazeno = true;
MessageBox.Show(zaz.Nazev + " " + datum1, "Upozornění!");
reload();
}
}
}
}
Je tam jen
listZaznamu.Items.Clear();
listZaznamu.Items.AddRange();
to tvoje "jen" je to, co ti způsobuje tu vyjímku, protože saháš na ten listBox z jiného vlákna (z toho timerového).
Místo čistého reload zavolej tohle:
listZaznamu.Invoke((MethodInvoker)reload);
Tím řekneš z tvého timerového vlákna něco ve smyslu: hej, tu máš odkaz na mojí metodu a vykonej si jí u sebe, protože já k němu nemám přístup.
Zobrazeno 9 zpráv z 9.