【问题标题】:How to schedule a function to certain date time or convert a function into Console App?如何将功能安排到某个日期时间或将功能转换为控制台应用程序?
【发布时间】:2021-12-30 09:45:34
【问题描述】:

我有一个 Windows 窗体应用程序,我正在尝试使用公司后端发送 SMS 和电子邮件消息。

假设我有 N 个类(SMS 发送者和电子邮件发送者是其中的一部分),并且所有这些类都具有调用所需后端服务的 Execute() 函数。我想要做的是,假设用户填写了所需的区域(邮件模板、接收者电子邮件等),用户将选择一个日期时间来执行给定的功能。

我知道我可以使用 Timer,但是这会消耗太多资源。

我知道我可以使用 Windows 调度程序,但我认为我必须将我的函数转换为 .exe 文件并使用 Windows 任务调度程序进行调度,但我不能简单地将我的项目转换为控制台应用程序

如何在给定的 DateTime 调用我的 Execute() 函数?

【问题讨论】:

  • 只有当 winforms 应用程序 24*7 全天候保持打开状态时才有效。您的后端,假设它是一个 24*7 运行的后台进程,应该创建计时器。或者确实在运行 24*7 的服务器机器上使用 windows 调度程序或 windows 服务。
  • “我可以使用 Timer,但它会消耗太多资源。” -- 所以你想要一个比System.Windows.Forms.Timer 消耗更少资源的解决方案?多少资源太多了?
  • @TheodorZoulias AFAIK 计时器一直在后台运行,我必须手动检查时间是否到了,我希望在运行我的功能的给定 DateTime 触发某种软件中断,不是手动控制
  • 并且,给定截止日期和当前数据,您可以计算初始化计时器所需的确切时间跨度。但是,如果截止日期是几个小时或几天后,桌面应用程序需要一直保持打开状态!这不是问题吗?

标签: c# multithreading timer scheduled-tasks windows-task-scheduler


【解决方案1】:

首先,不应在客户端 PC 上制定计划 - 如果有人关闭应用程序/整个 PC 怎么办?当然你可以创建一种服务来在后台处理这个问题,但这并不能解决电脑关机问题。

因此,您的 Web 服务应该响应调度的执行。客户端应用程序应向网络服务发送消息,例如“晚上 8 点发送消息到...”。

在 web 服务中,您应该使用某种调度程序,例如。 Quartz.NET 或 Hangfire。 关于您的 Log4J 问题,Log4Net 不受影响: https://blogs.apache.org/security/entry/cve-2021-44228

如果您发送消息的 web 服务不是您的,那么 IMO Windows 服务 + 调度程序可能是一个解决方案.. 但前提是机器 24/7 运行,否则总会有一些消息不会发送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    相关资源
    最近更新 更多