我使用后台工作人员,因为我的程序中的某些方法需要时间从互联网下载数据。这个方法“阻止”了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
}现在我的问题是,doWork方法不是由BackgroundWorker调用的。我做错什么了?
发布于 2015-07-01 12:49:19
我想你是在找这个:
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
}所有这些都是为了你而不用其他任何东西。很简单!
发布于 2015-07-01 12:48:08
你必须启动工人。
worker.RunWorkerAsync();发布于 2015-07-01 12:48:20
你必须打电话给worker.RunWorkerAsync();才能启动工人。还有一个重载,允许您将object参数传递给您的DoWork函数:
void RunWorkerAsync(object argument)您还可以添加一个处理程序,以便知道工作人员何时完成:worker.RunWorkerCompleted。在这个处理程序中,您可以访问DataGrid,因为它将在UI线程中(假设您在UI线程中创建了工作人员)。
https://stackoverflow.com/questions/31161703
复制相似问题