您好我正在尝试实现此功能,其中我有一个扫描我的数据库的函数,并在设定的一段时间后返回一定的值,可能是5分钟。此功能应在后台进程中运行,而不会以任何方式阻碍用户。我已经阅读了几篇关于“后台工作者”和“线程”的文章,但我想就如何实现这一点提供一些指导。
例如:
private void func()
{
MessageBox.Show("Hello World!");
}
现在我希望这个函数每15分钟执行一次,只要应用程序正在运行,一切都应该在后台进程中完成,而不会中断用户,直到最终显示消息框。
答案 0 :(得分:1)
使用以下示例代码: -
// Create a 1 min timer
timer = new System.Timers.Timer(60000);
// Hook up the Elapsed event for the timer.
timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
timer.Enabled = true;
...
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
MessageBox.Show("Hello World!");
// Your code
}
答案 1 :(得分:1)
有许多方法可以实现您的要求。最简单的方法是在主表单上使用Timer
和BackgroundWorker
组件。
在每个Tick
计时器上,您调用后台工作人员的RunWorkerAsync
方法。在DoWork
事件中处理您的事情,并在RunWorkerCompleted
中显示您的结果,这样您的申请就不会在MessageBox.Show
中显示。
答案 2 :(得分:0)
Thread t = new Thread( new ThreadStart(func));
t.start();
private void func()
{
while(true)
{
MessageBox.Show("Hello World!");
Thread.Sleep(5000);
}
}
答案 3 :(得分:0)
我不确定"不会以任何方式妨碍用户",但是:
public static Thread Schedule(Action action, int delaysecs)
{
return new Thread(new ThreadStart(() =>
{
DateTime dateTime = DateTime.Now;
while (true) {
if (DateTime.Now > dateTime)
{
action();
dateTime.AddSeconds(delaysecs);
}
Thread.Sleep(1000); //Adjust for accuracy
}
})).Start();
}
此代码创建并返回保证每隔action
秒执行delaysecs
的线程。即使action
花费的时间超过一秒,也不会延迟下一个action
,并且不会妨碍用户体验。 (如果它当然不重要。)