Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用backgroundworker实现时间控制_C#_.net_Winforms_Multithreading_Backgroundworker - Fatal编程技术网

C# 使用backgroundworker实现时间控制

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

我有一个应用程序,它将数据捕获到csv文件中,程序每5秒捕获一次数据。问题是,在后台发生这种情况时,我无法执行任何其他操作。我正在用定时器来完成这项工作

我找到了
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
    }
}