Пишите в журнал каждый раз - PullRequest
1 голос
/ 16 ноября 2011

Я хочу записывать в журнал каждые 3 часа, используя System.IO

Неважно, как называются файлы. Действительно, как я могу сделать так, чтобы каждые 3 часа что-то происходило?

Ответы [ 5 ]

2 голосов
/ 16 ноября 2011

Используйте таймер, установите его интервал на 3 * 60 * 60 * 1000 и, в случае тика, делайте то, что вам нужно.
Не забудьте остановить таймер и удалить обработчик перед закрытием формы или приложения ...

public partial class Form1 : Form
{
    Timer timer = null;

    public Form1()
    {
        InitializeComponent();

        timer = new Timer();
        timer.Interval = 3 * 60 * 60 * 1000;
        timer.Tick += new EventHandler(timer_Tick);
        timer.Enabled = true;
    }

    void timer_Tick(object sender, EventArgs e)
    {
        // Do what you need
        File.AppendAllText(log_file, your_message);

    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        timer.Stop();
        timer.Tick -= timer_Tick;
    }
}
1 голос
/ 16 ноября 2011

Почему бы не использовать Windows Task Scheduler , который может запускать каждую задачу с заданным интервалом и с необходимыми параметрами, а затем просто выводить то, что вам нужно, в журнал.

В качестве альтернативы выможет настроить службу с помощью объекта таймера и установить таймер соответствующим образом (таймер устанавливается в миллисекундах).См. этот ответ для получения дополнительной информации.

0 голосов
/ 16 ноября 2011

Начать тему, написать свой лог-файл, поспать 10 минут, пока не пройдет 3 часа: повтори! Проверяйте время после каждого сна, потому что сон гарантирует, что ваш поток не будет работать в течение x миллисекунд; может спать дольше!

0 голосов
/ 16 ноября 2011

Вы можете сделать это, используя класс управления Timer.Смотрите ниже код

System.Timers.Timer Auto_Timer = new System.Timers.Timer();

 Auto_Timer.Elapsed += new System.Timers.ElapsedEventHandler(Auto_Timer_Elapsed);
 Auto_Timer.Interval = (3*3600000); //3 hours time
 Auto_Timer.Enabled = true;

 void Auto_Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
 {
     writetolog(Message);
 }
0 голосов
/ 16 ноября 2011

Вы пишете из приложения, которое уже будет запущено, или у вас есть приложение, которое должно запускаться каждые 3 часа и вести журнал?

В последнем случае я бы просто использовал встроенный в планировщик заданий Windows. Вот для чего это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...