Получение контроля времени работы с помощью backgroundworker - PullRequest
2 голосов
/ 24 ноября 2011

У меня есть приложение, которое получает данные в CSV-файл, и программы получают данные каждые 5 секунд. проблема в том, что я не могу делать какие-либо другие операции, пока это происходит в фоновом режиме. Я использую таймер, чтобы выполнить работу.

Я узнал об элементе управления backgroundworker и попытался его использовать, и я установил RunWorkerAsync в методе замедления формы (после initializeComponent), но он все-таки начался. Ниже приведена кодировка для фонового работника.

Что здесь нужно исправить? и, если это неправильный подход, каков наилучший способ заставить фоновый процесс происходить, когда я могу приступить к другим формальным действиям. Спасибо

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();
    ...
}

1 Ответ

1 голос
/ 24 ноября 2011

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
    }
}
...