Andrew_STOP_RU_AGRESSION_IN_UA Asked:2020-11-21 13:45:31 +0000 UTC2020-11-21 13:45:31 +0000 UTC 2020-11-21 13:45:31 +0000 UTC 按计划在特定时间调用方法(按计划) 772 如何在每天或一次的特定时间调用一个方法? c# 1 个回答 Voted Best Answer Pavel Mayorov 2020-11-21T16:19:22Z2020-11-21T16:19:22Z 按计划调用方法的问题并没有以一般方式解决。事实上,在正确的时间,您的程序可能根本无法运行! 因此,对于初学者来说,您需要想出一种方法来根据这个时间表运行程序。 这里有三个选项: Windows 调度程序。有时他们似乎忘记了他——但他只会随着时间的推移变得更好。如果在同一个 XP 上,管理员经常关闭调度程序,那么在最新版本的 Windows 中,它通常会保持打开状态,因为许多有用的程序和服务都与它相关。 您可以在此处查看有关在 Windows 调度程序中创建任务的更多信息:创建计划任务 SQL 服务器代理。如果您使用 SQL Server(并且有相当多的项目使用它),那么它的代理将在附近的某个地方。创建任务的过程在 MSDN 上有描述(它们使用存储过程——也就是说,您需要连接到数据库和服务器管理员权限)。 在这两种情况下,您都需要某种方式来调用特定方法而不是整个程序。为此,您可以: 根据命令行参数选择要调用的方法。nuget的 CommandLineParser包可以在此处提供帮助。 使用电源外壳。由于 powershell 基于 CLR,您可以从中访问任何 C# 方法: Add-Type -Path путь\к\сборке.dll [Ваш.Класс]::СтатическийМетод(Параметры) SQL Server Agent 可以调用内置的 powershell 脚本,而 windows 调度程序将需要一个单独的磁盘文件。 此外,您可能需要处理AppDomain.AssemblyResolve加载依赖程序集的事件。 您可以编写自己的服务,该服务将一直运行并执行任务。在这种情况下,Quartz.NET库可能会派上用场。或者你可以“滚动”你的自行车(有基础 - 简单地Thread.Sleep或Task.Delay无限循环)。 无论如何,这里的主要问题是 - 将任务列表存储在某种永久存储 (DB) 中或在服务启动时恢复此列表。 存储在数据库中的方法更适合用户创建的任务,启动时恢复的方法更适合应用程序设置定义的任务。
按计划调用方法的问题并没有以一般方式解决。事实上,在正确的时间,您的程序可能根本无法运行!
因此,对于初学者来说,您需要想出一种方法来根据这个时间表运行程序。
这里有三个选项:
Windows 调度程序。有时他们似乎忘记了他——但他只会随着时间的推移变得更好。如果在同一个 XP 上,管理员经常关闭调度程序,那么在最新版本的 Windows 中,它通常会保持打开状态,因为许多有用的程序和服务都与它相关。
您可以在此处查看有关在 Windows 调度程序中创建任务的更多信息:创建计划任务
SQL 服务器代理。如果您使用 SQL Server(并且有相当多的项目使用它),那么它的代理将在附近的某个地方。创建任务的过程在 MSDN 上有描述(它们使用存储过程——也就是说,您需要连接到数据库和服务器管理员权限)。
在这两种情况下,您都需要某种方式来调用特定方法而不是整个程序。为此,您可以:
根据命令行参数选择要调用的方法。nuget的 CommandLineParser包可以在此处提供帮助。
使用电源外壳。由于 powershell 基于 CLR,您可以从中访问任何 C# 方法:
SQL Server Agent 可以调用内置的 powershell 脚本,而 windows 调度程序将需要一个单独的磁盘文件。
此外,您可能需要处理
AppDomain.AssemblyResolve加载依赖程序集的事件。您可以编写自己的服务,该服务将一直运行并执行任务。在这种情况下,Quartz.NET库可能会派上用场。或者你可以“滚动”你的自行车(有基础 - 简单地
Thread.Sleep或Task.Delay无限循环)。无论如何,这里的主要问题是 - 将任务列表存储在某种永久存储 (DB) 中或在服务启动时恢复此列表。
存储在数据库中的方法更适合用户创建的任务,启动时恢复的方法更适合应用程序设置定义的任务。