我使用的是后台工作者,因为我的程序中的某些方法需要时间从互联网上下载数据。这种方法"阻止" 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
。
我做错了什么?
答案 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
}
在不使用任何其他东西的情况下为您做这一切。简单!