C# 使用backgroundworker实现时间控制
我有一个应用程序,它将数据捕获到csv文件中,程序每5秒捕获一次数据。问题是,在后台发生这种情况时,我无法执行任何其他操作。我正在用定时器来完成这项工作 我找到了C# 使用backgroundworker实现时间控制,c#,.net,winforms,multithreading,backgroundworker,C#,.net,Winforms,Multithreading,Backgroundworker,我有一个应用程序,它将数据捕获到csv文件中,程序每5秒捕获一次数据。问题是,在后台发生这种情况时,我无法执行任何其他操作。我正在用定时器来完成这项工作 我找到了backgroundworker控件,并尝试使用它,我在表单减速方法中设置了RunWorkerAsync(在初始化组件之后)),但它没有启动。我在下面给出了backgroundworker的编码 这里需要更正什么?如果这不是一个正确的方法,那么在我能够进行其他形式活动的同时,让背景过程发生的最好方法是什么呢?谢谢 private voi
backgroundworker
控件,并尝试使用它,我在表单减速方法中设置了RunWorkerAsync
(在初始化组件之后)
),但它没有启动。我在下面给出了backgroundworker的编码
这里需要更正什么?如果这不是一个正确的方法,那么在我能够进行其他形式活动的同时,让背景过程发生的最好方法是什么呢?谢谢
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线程上启动
计时器,否则它将失败。另外,也不需要自己设置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
}
}