Во многих случаях мне нужно использовать эти функции в C#. Мои проекты должны быть .NET 4.0, а следующий код - результат, который я смог написать после чтения вопросов и ответов об этих функциях. Я использовал их некоторое время и не имел никаких проблем. Однако игра с потоками опасна, поэтому я сомневаюсь, что я делаю это неправильно или нет.Javascript SetTimeout, SetInterval и ClearInterval эквивалент в C#
Вопрос в том, являются ли эти функции безопасными в использовании; или есть лучший способ сделать это для .NET 4.0?
private static volatile List<System.Threading.Timer> _timers = new List<System.Threading.Timer>();
private static object lockobj = new object();
public static void SetTimeout(Action action, int delayInMilliseconds)
{
System.Threading.Timer timer = null;
var cb = new System.Threading.TimerCallback((state) =>
{
lock (lockobj)
_timers.Remove(timer);
timer.Dispose();
action();
});
lock (lockobj)
_timers.Add(timer = new System.Threading.Timer(cb, null, delayInMilliseconds, System.Threading.Timeout.Infinite));
}
private static volatile Dictionary<Guid, System.Threading.Timer> _timers2 = new Dictionary<Guid, System.Threading.Timer>();
private static object lockobj2 = new object();
public static Guid SetInterval(Action action, int delayInMilliseconds)
{
System.Threading.Timer timer = null;
var cb = new System.Threading.TimerCallback((state) => action());
lock (lockobj2)
{
Guid guid = Guid.NewGuid();
_timers2.Add(guid, timer = new System.Threading.Timer(cb, null, delayInMilliseconds, delayInMilliseconds));
return guid;
}
}
public static bool ClearInterval(Guid guid)
{
lock (lockobj2)
{
if (!_timers2.ContainsKey(guid))
return false;
else
{
var t = _timers2[guid];
_timers2.Remove(guid);
t.Dispose();
return true;
}
}
}
У JS нет таймеров, 'setTimeout' и' setInterval' являются методами DOM. – Teemu
@Teemu - не слишком чрезмерно педантичный, вы знаете, что означал OP. –
@ JᴀʏMᴇᴇ Комментарий не означал слишком-педантичный. Просто говоря, что таймеры не встроены в JavaScript. Это может быть полезно при попытке найти похожие функции с других языков. – Teemu