Zaktualizuj etykietę z innego wątku [duplikat]
To pytanie ma już odpowiedź tutaj:
Cross-Thread Edycja kontrolek Winforms [duplikat] 1 odpowiedźUżywam wątku piszącego w innej klasie do aktualizacji etykiety. Etykieta jest zawarta w klasie głównej Winform.
Scanner scanner = new Scanner(ref lblCont);
scanner.ListaFile = this.listFiles;
Thread trd = new Thread(new ThreadStart(scanner.automaticScanner));
trd.IsBackground = true;
trd.Start();
while (!trd.IsAlive) ;
trd.Join();
Jak widzisz, przekazuję odwołanie do etykiety do konstruktora drugiej klasy. W drugiej klasie (skaner) mam metodę o nazwie „AutomaticScanner”, która powinna zaktualizować etykietę za pomocą tego kodu:
public Scanner(ref ToolStripStatusLabel _lblContatore)
{
lblCounter= _lblContatore;
}
Thread threadUpdateCounter = new Thread(new ThreadStart(this.UpdateCounter));
threadUpdateCounter.IsBackground = true;
threadUpdateCounter.Start();
while (!threadUpdateCounter .IsAlive) ;
threadUpdateCounter.Join();
private void AggiornaContatore()
{
this.lblCounter.Text = this.index.ToString();
}
Otrzymuję ten błąd podczas aktualizacji etykiety:
Nieprawidłowa operacja krzyżowa: Kontrola „Main” dostępna z wątku innego niż wątek, który utworzono w
Używam .net 4 z Winform C #.
Bardzo dziękuję za odpowiedzi.
News: Problemem jest ta linia:
trd.Join();
Ten wiersz zablokował mój GUI i etykieta nie została zaktualizowana. Czy istnieją metody kontroli zakończenia wątku i aktualizacji etykiety do końca? Dzięk