使用后台工作人员进行时间控制

本文关键字:时间 控制 工作人员 后台 | 更新日期: 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
    }
}