Na głównej formie mam button po którego naciśnięciu uruchamiana jest funkcja (prosta pętla) w osobnym wątku. Jak sprawdzić czas działania tej pętli (wątku) i wyświetlić tą wartość na label na głównej formie? Projekt robiony w Visual C#.
przed petla zapisac aktualny datoczas / uruchomic stoper
wykonac petle
po niej pobrac aktualny datoczas, -= poprzedni / zatrzymac stoper i sprawdzic
wyslac komunikat do okna z informacja ile czasu uplynelo
w reakcji na komuniakt, zmienic tresc labelki
dwa ostatnie punkty mozesz zwykle zmiazdzyc do postaci a'la:
if(labelka.InvokeRequired) okno.labelka.Invoke( () => okno.labelka.Text = wartosc.ToString() ); //*
else okno.labelka.Text = wartosc.ToString(); //**
//* - nakaz wywolania delegatu poprzez Invoke robi dokladnie to, co dwa ostatnie punkty
//** - a tak to wyglada gdy FrameWork uzna ze Invoke nie jest potrzebny
ps. nie musze mowic ze watek musi miec dostep do obiektu okna, i ze albo musi miec dostep do 'labelka', albo trzeba sobie wystawic w oknie odpowiednia metode publiczna?
no właśnie to co napisałeś to wiem, a mówić masz właśnie o tym w ps :) u mnie wyskakuje błąd że wątek próbuje uzyskać do elementu innego wątku którego nie jest właścicielem (komunikat w tym stylu).
tak wiec napisalem co nastepuje:
quetzalcoatl napisał(a)
wyslac komunikat do okna z informacja ile czasu uplynelo //<-przedostatni punkt
w reakcji na komuniakt, zmienic tresc labelki //<-ostatni punktdwa ostatnie punkty mozesz zwykle zmiazdzyc do postaci a'la:
if(okno.labelka.InvokeRequired) okno.labelka.Invoke( () => okno.labelka.Text = wartosc.ToString() ); //*
else okno.labelka.Text = wartosc.ToString(); //**** - nakaz wywolania delegatu poprzez Invoke robi dokladnie to, co dwa ostatnie punkty oznaczone na gorze..
//* - a tak to wyglada gdy FrameWork uzna ze Invoke nie jest potrzebny