Jest jasne: na przykład wyobraź sobie przycisk w mojej formie. Kiedy użytkownik kliknie przycisk, jakaś nieważna metoda powinna zostać uruchomiona po 30 sekundach.Jak uruchomić metodę po upływie określonego czasu?
Istnieje metoda "DoAfterDelay", która wymaga dwóch wejść, pierwsza to metoda do wykonania (użycie delegatów), a druga to interwał czasowy. Więc będę miał:
public delegate void IVoidDelegate();
static void DoAfterDelay(IVoidDelegate TheMethod, TimeSpan Interval)
{
// *** Some code that will pause the process for "Interval".
TheMethod();
}
Potrzebuję tylko kawałka kodu, aby wstrzymać proces w określonym przedziale czasu. Dotychczas używałem ten kod, aby to zrobić:
System.Threading.Thread.Sleep(Interval);
ale ten kod nie jest dobre dla mnie, ponieważ cały proces zatrzymuje się i zamarza program. Nie chcę, aby program utknął w metodzie "DoAfterDelay". Dlatego Thread.Sleep
jest bezużyteczny.
Czy ktoś mógłby zaproponować lepszy sposób? Oczywiście szukałem o tym, ale większość rozwiązań znalazłem gdzie oparte na użyciu timera (na przykład here). Ale używanie timera jest moją ostatnią opinią, ponieważ metoda powinna zostać uruchomiona raz, a użycie timerów sprawia, że program jest mylący. Więc szukam lepszego rozwiązania, jeśli tak jest. A może muszę użyć timerów?
Chyba muszę grać z wątkami, ale nie jestem pewien. Zastanawiam się więc, czy ktoś mógłby mnie poprowadzić do rozwiązania. Z góry dziękuję.
spróbuj użyć 'Timer'. – Adrian