2009-01-06 13 views
19

Skrócona forma tego pytania: Kiedy, jeśli w ogóle, właściwe jest użycie Forms.Timer w wielowątkowej aplikacji WinForm?Threading.Timer vs. Forms.Timer

Dokładniej, jestem architektem aplikacji, która używa wielu System.Threading.Timers do uruchamiania procesów asynchronicznie, sprawdzania kolejek zawierających wyniki tych asynchronicznych procesów i aktualizowania statystyk, które mają być wyświetlane przez główny formularz aplikacji.

Czy w takiej aplikacji właściwe jest użycie Forms.Timer do faktycznego sprawdzenia statystyk aplikacji i narysowania ich w formularzu głównym, czy też po prostu wyrzucenie klucza do płynnego działania aplikacji?

Odpowiedz

23

Forms.Timer rejestruje timer, aby wysłać wiadomość, gdy timer się wyłączy. Wydarzenie jest traktowane jak wydarzenie GUI. System.Threading.Timer używa podejścia blokującego wątki. Zasadniczo powinieneś użyć Forms.Timer dla twoich timerów zorientowanych na GUI (aby dodać niektóre efekty do interfejsu użytkownika) i Threading.Timer do planowania zadań i innych rzeczy.

+0

Zgodnie z artykułem wspomnianym przez Davida w Dakocie poniżej, Forms.Timer wysyła zdarzenie, gdy timer gaśnie ** i ** jeśli interfejs użytkownika nie jest zajęty ** i * * wykonuje się w wątku formularza, wykonuje niektóre prace synchronizacyjne i wywołuje dla Ciebie wątek krzyżowy – Suncat2000

13

MSDN miał comparison article, który traktuje przedmiot jako sprawiedliwy.

+2

Przyzwoity artykuł. Na potrzeby tej dyskusji byłoby miło, gdybyś podsumował różnice między nimi (Threading.Timer wymaga synchronizacji, ale zapewnia większą kontrolę, Forms.Timer niekoniecznie generuje zdarzenie dla każdego tiku, itp.) – Shog9

+1

Doskonały. Na mój "czytany" stos, który idzie. –

+0

@ t3rse: link jest martwy :( –

2

Zgadzam się z tym, co powiedzieli mi Mehrdad i David, ale powinniście być świadomi, że zegary nie dają gwarancji terminowości, porządku ani wykonania. Zbyt wiele minut i aplikacja się zawiesi ;-)

+0

Tyle wiedziałem W tej konkretnej architekturze nie jest wymagana ani deterministyczna kolejność wykonywania, ani konkretna terminowość. –