Как закрыть консольное приложение за указанное количество часов? - PullRequest
2 голосов
/ 27 января 2011

Мне было поручено добавить таймер в мое рабочее консольное приложение, чтобы оно автоматически закрывалось через некоторое время, не требуя ввода данных пользователем.В моем приложении есть функции, которые удаляют определенные данные в базе данных на основе определенных условий и выходят каждый раз, когда пользователь вводит «выход».Теперь требуется автоматическое прекращение процесса, даже если удаление элементов еще не выполнено, учитывая, что установлено время для закрытия приложения, скажем, 2 часа.

Может кто-нибудь мне помочь?Спасибо.

Ответы [ 5 ]

4 голосов
/ 27 января 2011

Вы можете создать System.Timers.Timer с интервалом TimeSpan.FromHours(2) и вызвать Environment.Exit() в обработчике Elapsed.

2 голосов
/ 27 января 2011

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

using Timer = System.Threading.Timer;

class Program
{
    private static readonly Timer  _timer = 
        new Timer(o => Environment.Exit(0), null, 5000, Timeout.Infinite);

    static void Main(string[] args)
    {
        Console.ReadLine();
    }
}
0 голосов
/ 02 февраля 2011

Я решил эту проблему, имея файл app.config, в котором есть значение key = "Stoptime". Затем я добавил условие, которое сравнивает текущее время с установленным временем окончания. Ниже приведен пример решения (для тех, у кого такая же проблема):

    public static void Main(string[] args)
    {
        string stoptime = ConfigurationManager.AppSettings["Stoptime"];
        DateTime timeEnd = Convert.ToDateTime(stoptime);

        today = DateTime.Now;
        Console.WriteLine(today);

        for (int i = 0; i < 100000; i++)
        {
            id.Add(i.ToString());
        }

        foreach(string item in id)
        {
            today = DateTime.Now;

            if (timeEnd.CompareTo(today) >= 0)
            {
                Console.CursorLeft = 0;
                Console.Write(item + " " + today);
            }
            else
            {
                Console.WriteLine();
                Console.WriteLine("break.");
                break;
            }
        }

        Console.ReadKey();
    }
0 голосов
/ 27 января 2011

Если вы удаляете данные из базы данных, то их внезапная остановка может привести к катастрофическим последствиям. Таким образом, вы можете реализовать что-то вроде этого.

  • Выполнение длительной операции в BackGroundWorker
  • Реализация таймера, как описано в других примерах.
  • Затем при возникновении события Tick / Interval запросить BackgroundWorker отменить задачу.
  • В вашем коде Do Work Прослушайте этот запрос отмены и безопасно остановите процесс удаления (либо выполните удаление, либо вообще не выполняйте его)
  • Затем используйте Environment.Exit () для выхода из программы.

Надеюсь, это поможет

0 голосов
/ 27 января 2011

1) создать таймер 2) установить интервал и обработчик прошедшего события 3) включить таймер для запуска

когда таймер срабатывает в методе, подключенном к событию, просто выйдите из приложения

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