2013-08-19 3 views
0

Я хочу выполнить определенный метод класса в регулярном интервале при выполнении определенного метода. У C# есть три метода, которые я могу использовать для удовлетворения моих потребностей. Поскольку я новичок в программировании на C#, я смущен в выборе правильного метода. Основываясь на моем исследовании, три класса:Правильный способ выполнения в регулярном интервале

System.Windows.Forms.Timer 
Systems.Timer 
System.Diagnostics.StopWatch 

Мое требование довольно прост: Выполнить определенный метод на регулярные промежутки времени, когда определенный метод.

Укажите, где предпочтительнее других.

+1

Во-первых, вы посмотрели документ для этих 3-х классов и посмотрели, в какой ситуации они были созданы? Честно говоря, вы не уйдете далеко, если вместо поиска в течение 5 минут и чтения простого документа, чтобы подделать свои собственные мнения, вы сразу же спросите об этом. –

ответ

2

StopWatch для измерения времени, а не для планирования событий, так что давайте править, что один из.

System.Windows.Forms.Timer основан на Windows Forms и требует, чтобы цикл сообщений Windows запускался. Является ли ваш проект Windows Forms, тогда вы можете его использовать. Если нет, не используйте его (это не сработает).

System.Timers.Timer - это таймер общего назначения. Я бы использовал это; он должен работать во всех сценариях, вам не нужно беспокоиться о запуске цикла сообщений. Вы также можете автоматически синхронизировать этот таймер, используя его свойство SynchronizationObject.

Наконец, есть System.Threading.Timer, который не является потокобезопасным из коробки (это означает, что ваш метод будет вызван в рабочий поток, поэтому, если вам нужна синхронизация или отправка по определенному потоку из-за пользовательского интерфейса, вам понадобится чтобы справиться с этим сами).

Есть много тонких отличий от этих таймеров, я бы рекомендовал вам прочитать статью Comparing the Timer Classes on MSDN для полной истории.

+0

Хорошо, это прояснило один из моих вопросов. Я не использую окна. Так что, будучи сказанным, у меня просто есть Система. Timers.Timer. Благодарю. –

+1

@Jack_of_All_Trades Просто поймите, что 'System.Timers.Timer' поднимет прошедшие события в потоке threadpool. Не имеет значения, но что-то, что нужно знать на всякий случай. –

1

Не зная вашего конкретного варианта использования, мы не можем сказать вам, что лучше. Но в целом:

System.Windows.Forms.Timer - Будет вызывать вашу функцию в потоке пользовательского интерфейса каждый раз. Используйте это, если вы планируете получать доступ к элементам пользовательского интерфейса во время события.

System.Timers.Timer - Позвонит вашу функцию в рабочий поток. Используйте это в контексте, который не является Windows Forms, или где вам не нужно обращаться к каким-либо элементам пользовательского интерфейса.

System.Diagnostics.StopWatch - это для определения времени, которое требуется. Это вам не поможет.

См: http://msdn.microsoft.com/en-us/magazine/cc164015.aspx

Смежные вопросы