我的形式創建一個BackgroundWorker過程..進度條和運行方法在背景中的BackgroundWorker
BackgroundWorker bw = new BackgroundWorker
{
WorkerReportsProgress = true,
WorkerSupportsCancellation = true
};
另外,我具有形式(進度條最小內部的進度條控制和最大值是1和100)。
在我按一下按鈕,
在click事件就會觸發,這是爲了在後臺和並行運行的實際方法調用,開機有顯示進度條的步驟....
if (bw.IsBusy)
{
return;
}
bw.DoWork += (bwSender, bwArg) =>
{
MethodCall1(); - Does some database insertions..
MethodCall2(); - Does some database select...
}
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.RunWorkerCompleted += (bwSender, bwArg) =>
{
bw.Dispose();
};
bw.RunWorkerAsync();
進度條顯示的進展...
void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
}
我所面臨的問題是,進度條沒有踏,它固步自封,沒有進度條的進度。
我也嘗試在我的實際方法中插入bw.ReportProgress(integervalue),但它沒有幫助。
我怎樣纔能有一個backgroundworker線程處理方法調用,並行顯示進度條的進度,方法調用完成後,我想結束進度條步驟。
如果設置是達到bw_ProgressChanged斷點? e.ProgressPercentage是否具有您期望的價值? progressBar的最小/最大值與e.ProgressPercentage中的值相比是多少? –
顯然,您的代碼缺少必需的ReportProgress()調用,因此進度條不會移動。計算一個有意義的進度值並不總是可能的,你並不總是知道dbase引擎正在做什麼。唯一的選擇是使用ProgressBar.Style = Marquee。 「工作而非死亡」選項。 –
如果我將進度條的樣式設置爲選取框,則可以看到進度條,但是當我將其更改爲塊時,我看不到進度條的進度。 – Sharpeye500