长 运行 查询的进度条
Progress Bar For Long Running Query
我在 C# 中使用 VS 2005。我有一个大约需要 25 到 30 秒的查询,并使用 crystal 报告显示结果。
我想在执行查询时显示进度条。
我的情况与 Progress bar for long running task in C#
相同
我按照 post 中的步骤操作,但进度条是空白的。
请查看我的代码并告知需要什么。
private string orderby, startDate, endDate, brandName;
ReportDocument rpt;
private BackgroundWorker bgw;
private void SearchFunction()
{
orderby = cboOrderBy.Text;
startDate = txtFromDate.Text;
endDate = txtToDate.Text;
brandName = txtBrandName.Text;
bgw = new BackgroundWorker();
bgw.WorkerReportsProgress = true;
bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged);
bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
bgw.RunWorkerAsync();
}
void bgw_DoWork(object sender, DoWorkEventArgs e)
{
dt = obj1.getData1(orderby, startDate, endDate, brandName);
}
void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//After completing the job.
MessageBox.Show(@"Finished");
if (dt.Rows.Count > 0)
{
//some code for crystal report like
rpt = new myReport();
rpt.SetDataSource(dt);
crystalReportViewer1.ReportSource = rpt;
crystalReportViewer1.Refresh();
}
else
{
MessageBox.Show("No record found !");
}
}
简单,
你实际上并没有报告任何进展。
方法 1:显示进度(0% 到 100%)
只需在DoWork
方法中调用ReportProgress
即可。
void bgw_DoWork(object sender, DoWorkEventArgs e)
{
int percentComplete = 0;
// Do work and let the work increment percepercentComplete as it's busy.
bgw.ReportProgress(percentComplete);
}
这意味着您必须更改 getData1
方法需要在繁忙时分块报告进度。
方法二:无进度百分比(只是表示很忙)
如果您不想更改 getData1
,请在您的 ProgressBar
.
上将 IsInderminate
属性 设置为 true
progressBar1.IsInderminate = true;
那么你根本不需要bgw_ProgressChanged
方法。 DoWork
和 RunWorkerCompleted
就足够了。
编辑:
抱歉,我使用的是 WPF。 For.NET 2 您使用的是 WinForms 吗?
WinForms: 在设计器中,在 ProgressBar
上,将 Style
更改为 Marquee
。
我在 C# 中使用 VS 2005。我有一个大约需要 25 到 30 秒的查询,并使用 crystal 报告显示结果。
我想在执行查询时显示进度条。
我的情况与 Progress bar for long running task in C#
相同
我按照 post 中的步骤操作,但进度条是空白的。
请查看我的代码并告知需要什么。
private string orderby, startDate, endDate, brandName;
ReportDocument rpt;
private BackgroundWorker bgw;
private void SearchFunction()
{
orderby = cboOrderBy.Text;
startDate = txtFromDate.Text;
endDate = txtToDate.Text;
brandName = txtBrandName.Text;
bgw = new BackgroundWorker();
bgw.WorkerReportsProgress = true;
bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged);
bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
bgw.RunWorkerAsync();
}
void bgw_DoWork(object sender, DoWorkEventArgs e)
{
dt = obj1.getData1(orderby, startDate, endDate, brandName);
}
void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//After completing the job.
MessageBox.Show(@"Finished");
if (dt.Rows.Count > 0)
{
//some code for crystal report like
rpt = new myReport();
rpt.SetDataSource(dt);
crystalReportViewer1.ReportSource = rpt;
crystalReportViewer1.Refresh();
}
else
{
MessageBox.Show("No record found !");
}
}
简单,
你实际上并没有报告任何进展。
方法 1:显示进度(0% 到 100%)
只需在DoWork
方法中调用ReportProgress
即可。
void bgw_DoWork(object sender, DoWorkEventArgs e)
{
int percentComplete = 0;
// Do work and let the work increment percepercentComplete as it's busy.
bgw.ReportProgress(percentComplete);
}
这意味着您必须更改 getData1
方法需要在繁忙时分块报告进度。
方法二:无进度百分比(只是表示很忙)
如果您不想更改 getData1
,请在您的 ProgressBar
.
IsInderminate
属性 设置为 true
progressBar1.IsInderminate = true;
那么你根本不需要bgw_ProgressChanged
方法。 DoWork
和 RunWorkerCompleted
就足够了。
编辑:
抱歉,我使用的是 WPF。 For.NET 2 您使用的是 WinForms 吗?
WinForms: 在设计器中,在 ProgressBar
上,将 Style
更改为 Marquee
。