Member 12226114 Ответов: 2

C# - запуск приложения winform в определенное время


Я разрабатываю небольшое приложение winform для автоматической отправки электронной почты клиенту в определенное время каждый день.Клиент установит время из пользовательского интерфейса, поэтому, когда системное время = время, установленное клиентом, мое приложение отправит электронное письмо. Я включил datetimepicker, в котором клиент устанавливал желаемое время запуска. Настроенный формат выбора даты и времени по времени.


private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            timer1.Interval = 1000;
            toolStripTextBox1.Text = DateTime.Now.ToString("dd-MM-yyyy");
            toolStripTextBox2.Text = DateTime.Now.ToString("h:mm:ss tt");
           
        }


private void Form1_Load(object sender, EventArgs e)
       {

           dateTimePicker1.Format = DateTimePickerFormat.Time;
           dateTimePicker1.ShowUpDown = true;
           dateTimePicker1.CustomFormat = "h:mm:ss tt";
           dateTimePicker1.Value = DateTime.Now;
       }


Меня смущает сейчас, это как если сопоставить элемента управления datetimepicker.значение = toolStripTextBox2. Text? Потому что даже если я вернусь, ошибки не будет, но электронная почта все равно не будет отправлена.

Что я уже пробовал:

если (dateTimePicker1.Значение.Метод toString() == toolStripTextBox2.Текст)
{
textBox3. Text = " проблема решена";
}

Garth J Lancaster

Единственное, что я вижу сразу, - это предположение, что dateTimePicker1.Value.ToString () на самом деле возвращает значение в указанном вами формате - вы проверили, что вы получаете в этой строке ? Мои мысли от чтения docco заключаются в том, что настройка пользовательского формата предназначена только для отображения элемента управления dateTimePicker, а не обязательно для того, что вы получаете от него, когда читаете значение .. ты понимаешь, что я все это говорю ? ,, т. е., то, что я думаю, что вам нужно, это

если (dateTimePicker1.Значение.Метод toString("h: mm:ss tt") == toolStripTextBox2.Текст)

Member 12226114

Тнаков много. Это работает

2 Ответов

Рейтинг:
2

CPallini

Я предлагаю вам использовать планировщик задач Windows[^] вместо.


Member 12226114

Невозможно использовать планировщик задач для этого требования. Потому что у него есть пользовательский интерфейс, и это некоторые другие настраиваемые параметры, которые пользователь должен определить.

BillWoodruff

Вы можете использовать планировщик задач Win из C#, и есть статьи CodeProject, которые показывают вам, как это сделать. Начать здесь:

https://www.google.ca/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=c%23%20using%20windows%20task%20scheduler

BillWoodruff

+5 хотя ОП, возможно, не захочет вкладывать деньги в изучение планировщика задач Win, сейчас я думаю, что это лучший способ ... на "долгий срок."

CPallini

Именно так. Спасибо.

Рейтинг:
15

Richard MacCutchan

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


Member 12226114

Да, вы совершенно правы. Текстовые поля предназначены только для отображения даты и времени оператору пользовательского интерфейса. Просто формальность. Но я не знаю, как проверить системное текущее время = значение datetimepicker или нет?

Richard MacCutchan

Как я уже сказал выше: сохраните время в переменной, а затем получите время из системы и сравните эти два значения. И используйте фактические значения, а не преобразуйте их в строки.

Member 12226114

Большое спасибо. Тоже работать. Есть два решения

BillWoodruff

+5 прямой, эффективный :)

Richard MacCutchan

:большой палец вверх: