BackgroundWorker无法正常工作

时间:2015-07-01 12:44:46

标签: c# wpf

我使用的是后台工作者,因为我的程序中的某些方法需要时间从互联网上下载数据。这种方法"阻止" 5-6秒的软件,所以我想使用后台工作程序像线程一样执行方法。在我的课堂上,我创造了这个:

 private BackgroundWorker worker = new BackgroundWorker();

之后,在ComboBox选择更改后,我以这种方式调用BackgroundWorker:

worker.DoWork += new DoWorkEventHandler(doWork);

doWork方法包含:

public void doWork(object sender, DoWorkEventArgs e)
{
        classifica.getClassifica(); //call the method from another class
}

现在我的问题是BackgroundWorker没有调用方法doWork。 我做错了什么?

4 个答案:

答案 0 :(得分:1)

你必须开始工作。

$v = array_values($myarray['feed']['entry'][1]['title']);
$t = $v[1];

答案 1 :(得分:0)

您必须致电worker.RunWorkerAsync();才能启动工作人员。 还有一个重载,允许您将object参数传递给DoWork函数:

void RunWorkerAsync(object argument)

您还可以添加处理程序,以便了解工作人员何时完成:worker.RunWorkerCompleted。在此处理程序中,您可以访问DataGrid,因为它将位于UI线程中(假设您在UI线程中创建了worker)

答案 2 :(得分:0)

您需要以这种方式启动后台工作程序

if (bw.IsBusy != true)
{
    bw.RunWorkerAsync();
}

请按照此处了解详情https://msdn.microsoft.com/fr-fr/library/cc221403(v=vs.95).aspx

答案 3 :(得分:0)

我认为你正在寻找这个:

if (worker.IsBusy != true)
{
    worker.RunWorkerAsync();
}

虽然除非您设置在BackGroundWorker上或无法定位.NET 4.5,否则我强烈推荐WebClient.DownloadDataAsync

像这样使用:

static void DownloadData()
{
    string url = "http://google.com";
    WebClient client = new WebClient();
    client.DownloadDataCompleted += DownloadDataCompleted;
    client.DownloadDataAsync(new Uri(url));
}

static void DownloadDataCompleted(object sender,
DownloadDataCompletedEventArgs e)
{
    // Handle returned data here
}

在不使用任何其他东西的情况下为您做这一切。简单!