我遇到了一個問題,我似乎無法找出解決方案,我已經閱讀了幾個答案,並已知道我需要一個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