使用后台工作人员进行时间控制
本文关键字:时间 控制 工作人员 后台 | 更新日期: 2023-09-27 18:15:30
我有一个应用程序,将数据抓取到csv文件,程序每5秒抓取一次数据。问题是,我不能做任何其他操作,而这发生在后台。我用计时器来完成这项工作。
我发现了关于backgroundworker
控制,我试图使用它,我在形式减速方法(initializeComponent
之后)中设置RunWorkerAsync
,但它没有开始。我已经给出了下面后台工作人员的编码。
这里有什么需要更正的?如果这不是正确的方法,那么在我能够处理其他表单活动的同时,让后台进程发生的最好方法是什么?由于
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//int a = (int)(e.Argument);
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
}
else
{
timerQuote.Enabled = true;
timerQuote.Start();
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
MessageBox.Show("grabbing is terminated");
}
}
//Form decleration
public Form1()
{
InitializeComponent();
backgroundWorker1.RunWorkerAsync();
...
}
必须在UI线程上启动Timer
,否则它将静默失败。也不需要自己设置enabled属性-当你调用Start
方法时,它将变为true。
可以是:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var t = new Timer();
t.Tick += new EventHandler(GrabData);
t.Interval = 5000;
t.Start();
}
void GrabData(object sender, EventArgs e)
{
var data = Task.Factory.StartNew(() =>
{
// get and return data
});
// do something with the data.Result
}
}