Я пытаюсь создать скрипт, который что-то говорит, показывает всплывающее окно через 1 день. Насколько я знаю, я могу сделать это с помощью Thread.Stop или с помощью System.Timers или многими другими способами. Но проблема с каждым из них заключается в том, что компьютер должен постоянно работать, чтобы каждый из этих методов давал желаемый результат в нужное мне время. По сути, я хочу, чтобы скрипт запускался с установкой моей программы, ждал ровно 24 часа, а затем отображал окно сообщения. Если компьютер включен в это время, то есть через 24 часа, он должен показывать окно сообщения при следующем запуске, но только если прошло 24 часа или более. Пожалуйста, помогите, я не могу найти подходящее решение для этого. любая помощь будет высоко оценена. Я думаю, что этого можно достичь, получив dateTime.Now и поместив его в файл, а затем сравнивая текущее системное время со временем в файле каждый час или около того, и если прошло 24 часа или более, показать окно сообщения. Пожалуйста помоги
С# Таймер для запуска, даже если система выключена или перезапущена
26.09.2014
Ответы:
1
Если вам нужно всплывающее окно сообщения, вам понадобится приложение Windows Forms. Вот рабочий процесс того, как это будет работать:
- Приложение должно будет сохранять данные либо через базу данных, либо в файл.
- Когда приложение загружается впервые, оно проверяет либо базу данных, либо файл на наличие записи
TriggerDate
. - Если
TriggerDate
существует, извлеките эту дату и сравните ее с сегодняшними датой и временем. Если текущая дата и время превышают нашиTriggerDate
, отобразите окно сообщения. ВоссоздайтеTriggerDate
с текущей датой и временем плюс 24 часа. - Если
TriggerDate
не существует, создайте его, заполнив текущую дату и время плюс 24 часа (например,DateTime.Now.AddHours(24)
). - Используйте
Threading.Thread.Sleep()
, чтобы поспать в течение 5 минут. - Перейти к шагу 3 и повторить.
ИЗМЕНИТЬ
Код будет примерно таким:
private const string TriggerFile = @"C:\TriggerData\trigger.txt";
private DateTime _triggerDate;
if (!File.Exists(TriggerFile))
{
using (StreamWriter sw = File.CreateText(TriggerFile))
{
sw.WriteLine(DateTime.Now.AddHours(24));
}
}
using (StreamReader sr = File.OpenText(TriggerFile))
{
_triggerDate = DateTime.Parse(sr.ReadToEnd());
}
while (true)
{
if (DateTime.Now >= _triggerDate)
{
MessageBox.Show(@"Alert!");
using (StreamWriter sw = File.CreateText(TriggerFile))
{
sw.WriteLine(DateTime.Now.AddHours(24));
_triggerDate = DateTime.Now.AddHours(24);
}
}
System.Threading.Thread.Sleep(60000*5); // Sleep for 5 minutes
}
Возможно, вы не захотите делать while(true)
. Вы хотите реализовать способ выхода из программы.
26.09.2014
2
Если я правильно понимаю, вы можете использовать способ сохранить «дату начала». Вы можете сохранить дату начала таймера и прочитать значение из своего скрипта, таким образом, вы можете рассчитать, прошло ли 24 часа или более с момента, когда вы присвоили значение дате начала. Вы можете использовать простой файл TXT для сохранения значения.
26.09.2014
3
Я вижу два пути достижения этого:
- Простой способ (но не связанный строго с C#) — использовать планировщик задач и создать задачу, которая будет запускать вашу программу на C# каждые 24 часа. Один из способов сделать это из установщика — использовать SchTasks.exe. Этот метод позволяет вам просто выйти из программы после того, как ваша работа будет выполнена, без необходимости явного ожидания следующего запуска.
- Более сложный способ: создайте службу Windows, которая представляет собой программу, специально предназначенную для постоянной работы на главном компьютере. Однако эти программы немного сложнее писать. Дополнительные сведения о службах можно найти здесь. Однако вы можете не хотеть идти по этому пути, поскольку служба не может отображать пользовательские интерфейсы, такие как всплывающие окна.
26.09.2014
Новые материалы
Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..
Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально
Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..
Частный метод Python: улучшение инкапсуляции и безопасности
Введение
Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..
Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования
Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..
Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv)
Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..
Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..
Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..