Diskuze: Vícevláknové WPF - přístup ke kontrolkám
Zobrazeno 6 zpráv z 6.
Ahoj, já se snažím mít oddělené UI od kodu, takže mám kontrolku už mám připravenou a data do ní z jiného vlákna vkládám pomocí Dispacher.BeginInvoke().
http://www.itnetwork.cz/dev-lighter/615
Snažím se, aby pracovní vlákno postupně aktualizovalo progressbar a hlavní vlákno se mohlo soustředit na případné mačkání tlačítek. Když ale spustím tenhle kód, progressbar se neaktualizuje průběžně, ale až na konci činnosti se zobrazí celý vybarvený, navíc v průběhu činnosti jsou všechna tlačítka (takže celé hlavní okno) neaktivní.
Ono to asi, hádám, bude tím, že druhé vlákno musí nějak uspat to první, aby mohlo pracovat s jeho kontrolkou, proto mi ta forma nereaguje. Můžeš mi sem případně postnout svůj kód, jak to děláš ty, nebo popsat nějak konkrétněji?
for (int i = 0; i < 100; i++)
{
Dispatcher.BeginInvoke(new Action(() =>
{
progressBar.Value += 10;
}));
Thread.Sleep(1000);
}
Ta metoda musí být takto, já to umím říct jenom laicky, ale to
BeginInvoke() padne zpátky na vlákno, které se stará o ProgressBar.
Takže Když tam pak máš pořád zapisování do toho progressbaru tak si ho
zamkneš. Takže to má být jeden cyklus zapsat novou hodnotu počkat další
cyklus...
Myslím, že na toto se nejlépe hodí BackGroundWorker
Myslím, že je to zbytečně složité si tam dávat další třídu navíc co se o to bude starat, pokud se to chce jenom učit. Ale určitě je dobré se do budoucna na BackGroundWorker podívat. Je to šikovná věc.
Zobrazeno 6 zpráv z 6.