2011-08-19 9 views
8

Mam program, który wykonuje niektóre zadania kopiowania (za pomocą File.Copy), które mogą trwać kilka minut. Gdy użytkownik przyniesie kolejne okno na pierwszy plan w tym czasie, okno programu zostanie puste, ponieważ nie przerysowuje siebie.C# Okno staje się puste, gdy zajęte -> Pasek postępu? Ale jak?

Teraz chcę pokazać pasek postępu w dodatkowym oknie na środku ekranu, ale to okno też jest puste.

Więc zaczynam to w innym wątku, który nie pomógł.

Jestem pewien, że ktoś to zrobił wcześniej, ale nie mogę znaleźć działającego przykładu. Jakieś pomysły?

+3

Wykonaj swój długotrwały proces w BackgroundWorkerThread. – ChrisF

Odpowiedz

4

Jest ładny przykład w dokumentacji na BackgroundWorker class.

+0

dzięki. takie rzeczy są zbyt trudne do znalezienia, jeśli nie wiesz dokładnie, czego szukasz ... kto by pomyślał, że to jest komponent? ^^ – ihavenoaccount

+0

To właśnie stackoverflow został stworzony dla) Nie ma za co! – artplastika

0

Możesz użyć klasy BackgroundWorker.

Zobacz ten answer.

0

ChrisF jest poprawna. Twoja długa operacja powinna być wykonana w wątku BackgroundWorker. Możesz użyć usługi BackgroundWorker, aby zgłosić postęp i podłączyć ją do paska postępu w formularzu.

0

Musisz łączyć swoją operację za pomocą BackgroundWorker. Istnieją inne sposoby na wątkowanie operacji, ale ta jest prawdopodobnie najprostsza i nadal będzie wykonywać pompowanie komunikatów na pierwszym planie, aby system Windows nie sądził, że aplikacja przestała odpowiadać.

Inną opcją byłoby użyć Thread i używać Thread.Join czekać na zadanie w tle, aby zakończyć, ponieważ Thread.Join wysyła również standardowe informacje pompy wiadomość do Windows podczas oczekiwania.

Powiązane problemy