将Timer类从java转换为c#:调度任务
我正在将应用程序从 Java 移植到 C#,但遇到了与 java.util.Timer 和 System.Threading.Timer 之间的不同行为和功能相关的问题>。 事实上,在 Timer 类的 Java 版本中,有一个用于调度任务的功能(在原始代码中使用),而 .NET 版本中没有该功能,可以在以下位置调度一个任务(通过委托函数):一次。
有没有解决方案,甚至是一个小的类集来实现该功能?
我注意到存在几个调度库(一个例子是 Quartz),但我更喜欢一个能够最大限度地减少要使用的代码量的解决方案。
谢谢你们! :)
I'm porting an application from Java to C# and I'm facing a problem connected to the different behaviors and features between the java.util.Timer
and System.Threading.Timer
.
In fact, in the Java version of the Timer class there's a feature (used in the original code) for scheduling tasks, that is not present in the .NET version, where it is possible to schedule one task (through a delegate function) at a time.
Is there a solution, even a small class-set to implement the feature?
I've noticed the existence of several scheduling libraries (an example is Quartz), but I would prefer a solution which would minimize the amount of code to use.
Thank you all! :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用任何计时器类。 对于每个计划任务,创建一个新的计时器类,然后将 Interval 属性设置为 (ScheduledTime - DateTime.Now).TotalMilliseconds 并设置 AutoReset > 属性设置为 false(或者在 Tick 事件的代码隐藏中将 Enabeld 属性设置为 false)。 这将在指定的 ScheduledTime 执行一次您的代码。
You can just use any timer class. For each scheduled task, create a new timer class and just set the Interval property to (ScheduledTime - DateTime.Now).TotalMilliseconds and set the AutoReset property to false (or the Enabeld property to false in the code-behind for the Tick event). That will execute your code once at the specified ScheduledTime.
.NET 中至少有 4 个计时器。 您的简短回答:使用 System.Threading.Timer。 我建议您在此处阅读有关计时器的信息,以及研究 System.Windows.Threading.DispatchTimer(WPF 的一部分),它可以在特定时间调度事件,但在 UI 线程上执行此操作。
There are at least 4 timers in .NET. Your short answer: use System.Threading.Timer. I'd recommend reading about the timers here here, as well as looking into System.Windows.Threading.DispatchTimer (part of WPF) which can dispatch events at particular times, but does so on the UI thread.