В JavaScript уже давно есть глобальная функция setTimeout. В полном .NET (например Windows Forms) для этих-же целей можно использовать таймер (Threading.Timer) с настройкой без повторений. А вот для SilverLight такой метод реализовать почему-то забыли, хотя именно в интерфейсе пользователя он необходим больше всего.
Примеров можно придумать массу. Первое что приходит в голову — отложенное выполнение запроса для авто заполнения. Чтобы не слать на сервер каждую букву, а делать это только после того, как пользователь перестал вводить текст.
DispatcherTimeout это статический класс с одним методом — Set:
public static class DispatcherTimeout { private class DispatcherTimerContainingAction : DispatcherTimer { public Action<object> method { get; set; } public object state { get; set; } } private static void _onTimeout(object sender, EventArgs arg) { var t = sender as DispatcherTimerContainingAction; t.Stop(); t.method(t.state); t.Tick -= _onTimeout; } public static void Set(Action<object> func, object state, long timeout) { var timer = new DispatcherTimerContainingAction { Interval = TimeSpan.FromMilliseconds(timeout), method = func, state = state }; timer.Tick += _onTimeout; timer.Start(); } }
Использование приятно и просто:
int keyCounter = 0; public void OnLetterArive(string text) { Interlocked.Increment(ref keyCounter); DispatcherTimeout.Set((txt) => { Interlocked.Decrement(ref keyCounter); if(keyCounter==0) { //call service with 'txt parameter' } }, keyCounter, 600); }
Метки:C#, Microsoft, разработка, SilverLight
Похожие статьи
- 12 февраля 2009 -- Мультипоточность в Windows.Forms и WPF (6)
- 30 декабря 2008 -- Создаем ASHX хендлер в ASP.NET (1)
- 15 сентября 2011 -- C#: Запуск Windows сервисов как консольных приложений (5)
- 22 августа 2008 -- Собственная страница для обработки ошибок на ASP.NET (0)
- 30 июля 2010 -- DLR 1.0 на примере IronPython 2.6 (0)
22 марта, 2011 at 11:57
Неверно исходть из соображение, что если есть функционал в «полном .NET», то это есть и в Silverlight. Тут действует обратная логика: а есть ли в SL то, что реализовано в «полном .NET»? Стандартный ответ: наверное есть, но реализовано по-своему.
22 марта, 2011 at 17:00
Да, это так. WPF и Silverlight используют общие классы и пространства имен, но техноголии разные. Наверно на это былы особые причины…