如何安排事件,例如我需要调用一个方法,该方法应该在给定的每一秒内执行其操作。我正在开发简单的 Windows 窗体应用程序,我尝试使用 like
while(true)
{
methodToBeScheduled();
Thread.Sleep(60000);
}
这段特殊的代码使我的应用程序在执行时“无响应”。我希望计时器可以做到这一点或您专家建议的任何其他逻辑,请告诉我。
谢谢!
如何安排事件,例如我需要调用一个方法,该方法应该在给定的每一秒内执行其操作。我正在开发简单的 Windows 窗体应用程序,我尝试使用 like
while(true)
{
methodToBeScheduled();
Thread.Sleep(60000);
}
这段特殊的代码使我的应用程序在执行时“无响应”。我希望计时器可以做到这一点或您专家建议的任何其他逻辑,请告诉我。
谢谢!
您可以使用WinForms 计时器:
Timer _timer;
// In constructor (or anywhere you want to start the timer, e.g. a button event):
_timer = new Timer();
_timer.Interval = 60000; // milliseconds
_timer.Tick += (sender, e) => methodToBeScheduled();
_timer.Start();
这将导致methodToBeScheduled
大约每 60 秒调用一次。它将在主 UI 线程上调用,因此请避免在其中进行任何繁重的处理。
使用这个定时器的好处是它是内置的,不需要线程同步,使用简单。缺点是间隔不准确——实际间隔会根据应用程序中需要处理的其他消息而有所不同,并且还受制于 Windows 系统时钟,仅精确到 10-20ms 或所以。
您可以使用Timer
(System.Threading.Timer)。
using System;
using System.Threading;
Timer _timer = null;
_timer = new Timer(o =>
{
methodToBeScheduled();
});
_timer.Change(TimeSpan.Zero, TimeSpan.FromSeconds(60));
Var sequence = Observable.interval(1).publish Sequence.subscribe ....
将允许订阅一个每秒触发一次 onnext 的 observable。见反应扩展..
讨厌在 iPad 上打字……
是的,.net 中有三种不同类型的计时器(所有这些都被命名为 Timer,但行为略有不同)。windows.forms 计时器以一定的速率执行一个函数——它从 UI 线程调用该函数。System.Threading Timer 执行相同的操作,但从另一个线程调用该函数。还有一个计时器,我不记得了。您必须根据自己的情况选择其中之一。
线程计时器是我的最爱。这是一个如何使用它的示例。请记住,您所调用的任何内容都不是从 UI 线程完成的。如果这是一个问题,可能想要使用表单计时器或同步事物。