我遇到了一个问题,我似乎无法找出解决方案,我已经阅读了几个答案,并已知道我需要一个BackgroundWorker线程使这个解决方案有效,但我仍然遇到一些问题。在后台的进度栏工人没有加载
我有一个小尺寸的第二个窗体,并将其设置为屏幕中央,并将ProgressBar样式设置为“选取框”,此第二个窗体上没有其他任何内容,因为它旨在模拟加载栏。
在我的数据的代码的密集部分,主要形式,其中它抓住和从我已经它写成这样一个数据库解析数据上:
GetData()
{
bwLoading.RunWorkerAsync();
//Runs all the processing
bwLoading.CancelAsync();
}
背景工人在下面定义为这样,也是主要的形式。
private void bwLoading_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
frmLoading lb = new frmLoading();
bool running = true;
while (running)
{
if ((worker.CancellationPending == true))
{
lb.Close();
running = false;
}
else
{
lb.Show();
}
}
}
我所遇到的问题是,用这种方法,显示了包含进度条也显示当数据开始被收集和处理以及数据加载完成后不会消失装载形式,但该窗口是空的,就像它试图加载,但它没有。我似乎无法弄清楚为什么这不起作用。
是不是后台工作人员为加载表单创建单独的线程来使用?还是有我从阅读中错过的其他东西?
为什么CancelAsync?试图消除这一点? – 2012-02-20 23:22:23
并且:不要在DoWork()中创建或显示表单。 – 2012-02-20 23:23:48
@HenkHolterman我不相信你正确理解我的问题。我正在处理时显示一个“繁忙”框。取消是为了让后台工作人员知道何时隐藏“繁忙”框。 – Sorean 2012-02-20 23:48:53