Как называть метод ежедневно, в определенное время, в C#?

Я думаю, тебе следует удалить «li a», и это работает. Ниже приведен код

var linktext1= jQuery(".selected").next().text();
alert (linktext1);

Вот пример jsfiddle

72
задан Community 23 May 2017 в 10:31
поделиться

7 ответов

  • Создайте консольное приложение, которое делает то, что вам нужно
  • Используйте функцию Windows "Запланированные задачи", чтобы это консольное приложение выполнялось в нужное вам время

Это действительно все, что вам нужно!

Обновление: Если вы хотите сделать это внутри вашего приложения, у вас есть несколько вариантов:

  • в приложении Windows Forms вы можете подключиться к событию Application.Idle и проверить, достигли ли вы времени суток для вызова вашего метода. Этот метод вызывается только тогда, когда ваше приложение не занято другими делами. Быстрая проверка, чтобы увидеть, достигнуто ли целевое время, не должна слишком сильно нагружать ваше приложение, я думаю...
  • в веб-приложении ASP.NET есть методы для "имитации" отправки запланированных событий - посмотрите эту статью CodeProject
  • и, конечно, вы также можете просто "запустить свой собственный" в любом приложении .NET - посмотрите эту статью CodeProject для примера реализации

Обновление #2: если вы хотите проверять каждые 60 минут, вы можете создать таймер, который просыпается каждые 60 минут, и если время истекло, он вызывает метод.

Что-то вроде этого:

using System.Timers;

const double interval60Minutes = 60 * 60 * 1000; // milliseconds to one hour

Timer checkForTime = new Timer(interval60Minutes);
checkForTime.Elapsed += new ElapsedEventHandler(checkForTime_Elapsed);
checkForTime.Enabled = true;

и затем в обработчике событий:

void checkForTime_Elapsed(object sender, ElapsedEventArgs e)
{
    if (timeIsReady())
    {
       SendEmail();
    }
}
74
ответ дан 24 November 2019 в 12:43
поделиться

Попытайтесь использовать Windows Task Scheduler. Создайте exe, который не запрашивает вводы данных пользователем.

https://docs.microsoft.com/en-us/windows/win32/taskschd/task-scheduler-start-page

0
ответ дан 24 November 2019 в 12:43
поделиться

Решение с Системой. Поточная обработка. Таймер:

    private void nameOfMethod()
    {
        //do something
    }

    /// <summary>
    /// run method at 22:00 every day
    /// </summary>
    private void runMethodEveryDay()
    {
        var runAt = DateTime.Today + TimeSpan.FromHours(22);

        if(runAt.Hour>=22)
            runAt = runAt.AddDays(1.00d); //if aplication is started after 22:00 

        var dueTime = runAt - DateTime.Now; //time before first run ; 

        long broj3 = (long)dueTime.TotalMilliseconds;
        TimeSpan ts2 = new TimeSpan(24, 0, 1);//period of repeating method
        long broj4 = (long)ts2.TotalMilliseconds;
        timer2 = new System.Threading.Timer(_ => nameOfMethod(), null, broj3, broj4);
    }
-1
ответ дан 24 November 2019 в 12:43
поделиться

Если вы хотите, чтобы исполняемый файл запускался, используйте запланированные задачи Windows. Я собираюсь предположить (возможно, ошибочно), что вы хотите, чтобы метод выполнялся в вашей текущей программе.

Почему бы просто не запустить поток, непрерывно сохраняющий дату последнего вызова метода?

Просыпаться ли он каждую минуту (например) и, если текущее время больше указанного времени и последней даты сохраняется не текущая дата, вызовите метод и обновите дату.

1
ответ дан 24 November 2019 в 12:43
поделиться

Лучший метод, который я знаю, и, вероятно, самый простой - использовать планировщик задач Windows для выполнения кода в определенное время дня или заставить приложение работать постоянно и проверять определенное время дня, или написать службу windows, которая делает то же самое.

4
ответ дан 24 November 2019 в 12:43
поделиться

Когда я создаю приложения, требующие такой функциональности, я всегда использую Планировщик задач Windows через простую библиотеку .NET , которую я нашел .

Пожалуйста, см. Мой ответ на аналогичный вопрос , где приведен пример кода и другие пояснения.

9
ответ дан 24 November 2019 в 12:43
поделиться

Как говорили другие, вы можете использовать консольное приложение для запуска по расписанию. Другие не сказали, что это приложение может запускать перекрестный процесс EventWaitHandle, который вы ожидаете в своем основном приложении.

Консольное приложение:

class Program
{
    static void Main(string[] args)
    {
        EventWaitHandle handle = 
            new EventWaitHandle(true, EventResetMode.ManualReset, "GoodMutexName");
        handle.Set();
    }
}

Главное приложение:

private void Form1_Load(object sender, EventArgs e)
{
    // Background thread, will die with application
    ThreadPool.QueueUserWorkItem((dumby) => EmailWait());
}

private void EmailWait()
{
    EventWaitHandle handle = 
        new EventWaitHandle(false, EventResetMode.ManualReset, "GoodMutexName");

    while (true)
    {
        handle.WaitOne();

        SendEmail();

        handle.Reset();
    }
}
8
ответ дан 24 November 2019 в 12:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: