C# 长时间运行查询的进度条

C# 长时间运行查询的进度条,c#,crystal-reports,progress-bar,C#,Crystal Reports,Progress Bar,我将VS2005与C#一起使用。我有一个大约需要25到30秒的查询,并用crystal report显示结果。 我想在执行查询时显示进度条。 我的情况与 我按照那篇文章中的步骤操作,但进度栏是空白的。 请查看我的代码并建议需要什么。 简单, 你实际上没有报告任何进展 请参阅:简单 你实际上没有报告任何进展 参见:方法1:显示进度(0%至100%) 只需在DoWork方法中调用ReportProgress void bgw_DoWork(object sender, DoWorkEventArg


我将VS2005与C#一起使用。我有一个大约需要25到30秒的查询,并用crystal report显示结果。
我想在执行查询时显示进度条。
我的情况与
我按照那篇文章中的步骤操作,但进度栏是空白的。
请查看我的代码并建议需要什么。

简单,

你实际上没有报告任何进展

请参阅:

简单

你实际上没有报告任何进展

参见:

方法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
方法,因为它很忙,所以需要分块报告进度

方法2:无进度百分比(仅表示忙) 如果不想更改
getData1
,请在
ProgressBar
上将
IsInderminate
属性设置为true

progressBar1.IsInderminate = true;

那么您根本不需要
bgw\u ProgressChanged
方法<代码>DoWork和
RunWorkerCompleted
就足够了

编辑: 抱歉,我以为是WPF。对于.NET 2,您正在使用WinForms

WinForms:在设计器中的
ProgressBar
上,将
样式更改为
字幕

方法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
方法,因为它很忙,所以需要分块报告进度

方法2:无进度百分比(仅表示忙) 如果不想更改
getData1
,请在
ProgressBar
上将
IsInderminate
属性设置为true

progressBar1.IsInderminate = true;

那么您根本不需要
bgw\u ProgressChanged
方法<代码>DoWork
RunWorkerCompleted
就足够了

编辑: 抱歉,我以为是WPF。对于.NET 2,您正在使用WinForms



WinForms:在设计器中的
ProgressBar
上,将
Style
更改为
Marquee

。OP我想这需要从内部调用
getData()
@MickyDuncan,希望OP的正确用法是一个练习。我真希望人们在这里提出“为我做”问题之前先阅读教程。这些天来,当你手牵着手的时候,你会感到悲伤。我听到了,伙计。所以政策是,你可以给他们足够的钱让他们走上正轨“任何能让提问者走上正确方向的答案都是有帮助的”。不管怎样,我是贪婪的。OP我想这需要从内部调用
getData()
@MickyDuncan,希望OP的正确用法是一个练习。我真希望人们在这里提出“为我做”问题之前先阅读教程。这些天来,当你手牵着手的时候,你会感到悲伤。我听到了,伙计。所以政策是,你可以给他们足够的钱让他们走上正轨“任何能让提问者走上正确方向的答案都是有帮助的”。无论如何+1在DoWork方法中将数据分配给datatable后添加ReportProgress不会给出所需的输出。由于查询执行时间长,进度条在很长时间后开始填充。需要的输出是什么?更新进度是您的责任,因为您只调用了一个函数,所以您唯一的选择是@Niels Filter Method 2在DoWork Method中将数据分配给datatable后添加ReportProgress,而不提供所需的输出。由于查询执行时间长,进度条在很长时间后开始填充。需要的输出是什么?更新进度是您的责任,因为您只调用了一个函数,所以您唯一的选择是@Niels Filter Method 2tanks以获得答案。但我找不到IsUnderminate属性,是因为我使用的是.NETFramework2吗?我如何编辑getData1方法,因为它只是一个sql语句,并使用dataAdapter.fill方法,而不包括任何循环或许多进程。现在假设WinForms(.NET 2)?请参阅更新的答案:在designer中,将ProgressBar样式更改为
Marquee
。您好,Niels Filter,非常感谢您的帮助。我现在将进度条样式更改为字幕。我仍然想知道如何在不循环的情况下使用ReportProgress。我在网上发现的只是使用循环,我的函数没有循环,但只有一个查询,并使用数据适配器将结果填充到数据表中。请提出建议。如果您想在不循环的情况下调用
ReportProgress
,另一个选项是将
getData1
拆分为多个部分或查询,然后在每次查询后调用
ReportProgress
。谢谢您的回答。但我找不到IsUnderminate属性,是因为我使用的是.NETFramework2吗?我如何编辑getData1方法,因为它只是一个sql语句,并使用dataAdapter.fill方法,而不包括任何循环或许多进程。现在假设WinForms(.NET 2)?请参阅更新的答案:在designer中,将ProgressBar样式更改为
Marquee
。您好,Niels Filter,非常感谢您的帮助。我现在将进度条样式更改为字幕。我仍然想知道如何在不循环的情况下使用ReportProgress。我在网上发现的只是使用循环,我的函数没有循环,但只有一个查询,并使用数据适配器将结果填充到数据表中。请提出建议。如果您想在不循环的情况下调用
ReportProgress
,另一种选择是将
getData1
拆分为多个部分或查询,然后在每次查询后调用
ReportProgress