有没有其他方法可以设置长计时器间隔
本文关键字:计时器 设置 其他 方法 有没有 | 更新日期: 2023-09-27 18:36:35
我正在制作一个程序,该程序必须每 30 或 60 分钟检查一次数据库,并在 Windows 表单界面中显示结果(如果有)。当然,在执行数据库检查时,from 提供访问的其他功能应该仍然可用。为此,我正在使用System.Timers.Timer,它在与UI不同的线程上执行一个方法(如果使用这种方法有问题,请随时发表评论)。我写了一个小而简单的程序来测试热门事物的工作,只是注意到我无法真正将间隔设置为超过 ~ 1 分钟(我需要 30 分钟到一个小时)。我想出了这个解决方案:
public partial class Form1 : Form
{
int s = 2;
int counter = 1; //minutes counter
System.Timers.Timer t;
public Form1()
{
InitializeComponent();
t = new System.Timers.Timer();
t.Elapsed += timerElapsed;
t.Interval = 60000;
t.Start();
listBox1.Items.Add(DateTime.Now.ToString());
}
//doing stuff on a worker thread
public void timerElapsed(object sender, EventArgs e)
{
//check of 30 minutes have passed
if (counter < 30)
{
//increment counter and leave method
counter++;
return;
}
else
{
//do the stuff
s++;
string result = s + " " + DateTime.Now.ToString() + Thread.CurrentThread.ManagedThreadId.ToString();
//pass the result to the form`s listbox
Action action = () => listBox2.Items.Add(result);
this.Invoke(action);
//reset minutes counter
counter = 0;
}
}
//do other stuff to check if threadid`s are different
//and if the threads work simultaneously
private void button1_Click(object sender, EventArgs e)
{
for (int v = 0; v <= 100; v++)
{
string name = v + " " + Thread.CurrentThread.ManagedThreadId.ToString() +
" " + DateTime.Now.ToString(); ;
listBox1.Items.Add(name);
Thread.Sleep(1000); //so the whole operation should take around 100 seconds
}
}
}
但是这样,将引发 Elapsed 事件,并且每分钟调用一次 timerElapsed 方法,这似乎有点没用。有没有办法实际设置更长的计时器间隔?
间隔以毫秒为单位,因此您似乎已将间隔设置为 60 秒:
t.Interval = 60000; // 60 * 1000 (1 minute)
如果要有 1 小时的间隔,则需要将间隔更改为:
t.Interval = 3600000; // 60 * 60 * 1000 (1 hour)