2012-01-27 2 views
3

Можно создать дубликат:
Run a code in given time intervalC# - Использование делегата для запуска метода в то же время каждый час

У меня есть метод, который работает на час. Сейчас я делаю это так:

while (true) 
{ 
     string rightNow = DateTime.Now.ToString("mm"); 

     if (rightNow == "00") 
     { 
      RunMyMethod(); 
     } 
     Thread.Sleep(10000); 
} 

Я надежно сообщил друг, что я идиотка (и вообще плохой человек), и что я должен использовать событие и делегат, чтобы сделать это вместо , Я понимаю, что, вне рамок каких-либо методов, которые я должен объявить делегат с тем же типом возвращаемого значения, как мой метод, и с теми же входными параметрами, как так:

public delegate void MyMethodsDelegate(); 

Затем, когда я хочу использовать мой делегат I инстанцируйте его таким же образом, я класс создания экземпляра так:

MyMethodsDelegate foobar = new MyMethodsDelegate(RunMyMethod); 

Тогда я могу вызвать мой делегат так:

foobar.Invoke(); 

Ok поэтому у меня есть мои настройки делегата, как об этом событии? Событие, которое я хочу создать, это «Это x o'clock», а затем каждый раз, когда он наступает час, это снимает мой делегат.

Также, правильно ли я настроил свой делегат?

Благодаря

+0

Можно ли использовать Windows Task Schedular (http://msdn.microsoft.com/en-us/library/windows/desktop/aa383614(v=vs.85).aspx) вместо использования делегата создать exe и использовать расписание задач? –

+2

Ваш друг звучит как хороший парень. – Yuck

+1

http://stackoverflow.com/questions/1972964/run-a-code-in-given-time-interval – SwDevMan81

ответ

9

Вы можете использовать System.Timers.Timer класс, который выполняет делегат асинхронно и поднимает Elapsed event, когда данный интервал времени истечет. Я настоятельно рекомендую вам прочитать часть примечаний MSDN для класса Timer, see here.

System.Timers.Timer timer = new Timer(60 * 60 * 100); 

Случай 1: Подписаться на анонимный метод

timer.Elapsed += (s, e) => 
    { 
     // callback code here 
    }; 

Случай 2: Подписаться на явно определенный делегат

ElapsedEventHandler handler = (s, e) => 
    { 
     // callback code here 
    }; 
timer.Elapsed += handler; 

Случай 3: Присоединяюсь к существующему методу

timer.Elapsed += this.OnHourElapsed; 
private void OnHourElapsed(object sender, EventArgs args) 
{ 
    // callback code here 
} 

Затем fina LLY просто запустить таймер

timer.Start(); 
+1

Thankyou очень =) – JMK

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