如何在特定时间启动BackgroundWorker?

G B*_*sha 6 .net c# timer backgroundworker

我在给定的特定时间运行backgroundworker时遇到问题.

我的代码只用了一秒就运行了后台工程师.

我想在后台增加Interval时间.

我正在使用这行代码在按钮单击事件中运行后台:

private void button1_Click(object sender, EventArgs e)
{
    backgroundWorker1.RunWorkerAsync();
}
Run Code Online (Sandbox Code Playgroud)

然后在backgroundWorker1_DoWork:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    backgroundWorker1.CancelAsync();
}
Run Code Online (Sandbox Code Playgroud)

最后backgroundWorker1_RunWorkCompleted:

private void backgroundWorker1_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e)
{
    backgroundWorker1.RunWorkerAsync();
}
Run Code Online (Sandbox Code Playgroud)

我想连续运行背景,但每5秒或超过5秒.

如果有人能帮助我,我将非常感激,

提前致谢.

Pra*_*ana 11

运行

Timer类表示Timer控件,用于在运行时创建Timer.以下代码段在运行时创建Timer,设置其属性和事件处理程序.

Timer t = new Timer();   
t.Interval = 2000;    
timer1.Enabled = true;  
timer1.Tick += new System.EventHandler(OnTimerEvent);
Run Code Online (Sandbox Code Playgroud)

事件处理程序代码如下所示.

private void OnTimerEvent(object sender, EventArgs e) 
{
     backgroundWorker1.RunWorkerAsync();
}
Run Code Online (Sandbox Code Playgroud)

这是demo:C#Timer Tutorial

检查msdn上的文档:http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx


Sam*_*der 5

你可以添加一个Timer设置间隔,你想要后台工作程序运行的频率,以及你可以启动后台工作程序的计时器过去事件.

在尝试再次启动它之前,您需要检查后台工作程序是否不忙.如果出现这种情况,那么您可能会考虑在完成后立即再次启动后台工作程序.(如果你希望它每5秒至少运行一次)

如果您希望它在完成后等待5秒,那么您需要在启动后台工作程序之前停止计时器,然后在后台工作程序完成事件中,您需要重置计时器并再次启动它.

编辑

在你的下面的一条评论之后,似乎你有很多背景工作者,在这种情况下使用其他方法之一,在再次启动backgroundworker之前在后台工作人员完成事件中插入延迟可能是一个更好的解决方案.

您可以Thread.Sleep()按照建议使用插入延迟,也可以在函数中创建一个计时器,并为重新启动后台工作程序的计时器已过时事件分配一个委托.沿着这些(未经测试的)线的东西:

private void backgroundWorker1_RunWorkerCompleted(object sender,     RunWorkerCompletedEventArgs e)
{
    Timer timer = new Timer();
    timer.Interval = 5000;
    timer.Enabled = true;
    timer.Elapsed+=delegate (object sender, ElapsedEventArgs args)
        {
        backgroundWorker1.RunWorkerAsync();        
        };
    timer.Start ();
}
Run Code Online (Sandbox Code Playgroud)