Wątek naprawde w tle

0

Witam serdecznie ponownie. Piszę aplikację okienkową, i bardzo zależy mi żeby jedno okienko pracowało nizależnie w osobnym wątku, gdyż wykonuje tam pewne obliczenia, i chciałbym aby te obliczenia były w pętli nieskończonej. Noi mam problem. Jeśli używam pętli nieskończonej w funcji dla osobnego wątku, program wykrzacza sie:(
inaczej: Tworze wątek dla procedury licz();
w tej proceduże tworze obiekt formatki form 2, na tej formatce mam zdjęcie i zwykły labe, interesuje mnie dotarcie do labela, z racji że stworzyłem obiekt w wątku, to wątek nie ma problemu żeby zrobić np: zm.label1.Text = ""+ i;
zo wrzuca mi wartosc zmiennej i na wyswietlacz labela, teraz chce zeby to wszystko działało w pętli nieskończonej, a ja żebym ciągle mógł sobie cos działać na drugim okienu - tzw okienku głównym, niestety to niemożliwe, jeśli wykonuje program bez wywoływania wątku, to jest bez jawnego odwołania do wspomninej funkcji licz() wszystko gra, watek sobie działą w tle, jak sprawdzam bez pętli nieskończonej to jest świetnie, jak chce robic obliczenia non sto, to wątek "przejmuje sobie procesor" i już nie chce się nim dzielic. Moje pytanie jest następujące czy istnieja jakies backgrounworkery ktore rozwiaza ten problem? ewentualnie jakie mechcanizmy zastosowac do pogodzenia watkow?
pozdrawiam, pyrek

0

Nie wiem czy dobrze zrozumiałem. Do background wątków np ThreadPool. Ewentualnie, możesz ustalić priorytet wątku jako bardzo niski, chociaż wydaje mi się, że w tutaj problem w czymś innym tkwi.

0

to inaczej:)
chciałbym aby jakiś wątek aplikacji, posiadający i wykonujący pętle nieskończoną, działał sobi nie blokując całej aplikacji, to najprościej, jakich mechanizmów uzyć o czym poczytać?

0

Efekt (który wcale dziwny nie jest, bo obliczeniami blokujesz komunikaty, które są przesyłane pomiędzy elementami UI), który otrzymałeś to niezalecane pomieszanie drugiego wątku i interfejsu. Mimo tego, że stworzyłeś sobie formatkę w drugim wątku to i tak odwołujesz się (a raczej Windows Forms do twojego wątku) do interfejsu. Windows Forms nie jest thread-safe. Utwórz okno w głównym wątku i odwołuj się do labela przez metodę Invoke.

0

Najprostszy będzie BackgroundWorker. Tu masz wątek z wczoraj:
http://4programmers.net/Forum/viewtopic.php?id=159511
Problem był podobny tylko, że forma wyświetlająca wyniki działania metody tworzona jest w wątku głównym. Na samym dole wrzuciłem link do książki online opisującej wielowątkowość w C#.

1 użytkowników online, w tym zalogowanych: 0, gości: 1