【问题标题】:How to start a thread at a specific time?如何在特定时间启动线程?
【发布时间】:2021-11-10 13:10:40
【问题描述】:

我希望程序在早上 6 点 40 分开始,但它在开始时会在几秒钟后关闭。

void setUpTimer(TimeSpan alertTime)
{
  setUpTimer(new TimeSpan(21, 27, 0));
  DateTime current = DateTime.Now;
  TimeSpan timeToGo = alertTime - current.TimeOfDay;

  if (timeToGo < TimeSpan.Zero)
  {
    return; // Time already passed
  }
  timer = new System.Threading.Timer(x =>
  {
    doDiagnosis(); // 
  }, null, timeToGo, Timeout.InfiniteTimeSpan);
}

Dodiagnosis 是韩国学校的自我诊断自动化方法。与硒

void doDiagnosis()
{
                firefoxDriver.Navigate().GoToUrl("https://hcs.eduro.go.kr/");
firefoxDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(1);

  var element = firefoxDriver.FindElementByXPath("//[@id='btnConfirm2']");
  element.Click();

  Thread.Sleep(3000);

  schoolSelect();
  login();
  password();
  conditionCheck();
}

【问题讨论】:

标签: c# multithreading


【解决方案1】:

我认为线程不是实现此目的的最佳解决方案,请考虑使用 Cron 或 Quartz.NET 之类的库,它允许安排在特定时间运行的“作业”。

【讨论】:

  • 在 Windows 操作系统上,您还可以使用内置的任务计划程序。
  • 当然,虽然它依赖于平台。
  • 请不要在没有先将重要细节放在答案本身中的情况下做仅链接的答案。链接仅用于支持您的答案,而不是作为答案本身。
  • 而且,实际上,这并不能回答问题。
  • @Enigmativity 我在链接周围看到了一些文字,但我不明白为什么我必须在 Quartz 库周围写一篇文章,因为通过单击链接你可以阅读你需要了解的所有内容.
【解决方案2】:

我的猜测是应用程序在计时器过去之前退出,然后它显然不会被触发。

如果您有一个控制台应用程序,使用Async main 并使用类似这样的东西应该相当简单:

await Task.Delay(timeToGo);
doDiagnosis(); 

这应该防止应用程序在事件处理之前退出。但这是假设您想要一个只运行一次的应用程序。如果你需要每天运行这个东西,你可以将上面的代码放在一个循环中,但是使用 windows 任务调度器来安排你的应用程序的运行可能会更好。

【讨论】:

    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2022-06-26
    相关资源
    最近更新 更多