В 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 используют общие классы и пространства имен, но техноголии разные. Наверно на это былы особые причины…