我有一个后台工作程序,它根据用户提供的参数执行可能需要大量时间(10秒以上)的查询。
我想为他们提供一个进度条,指示完成百分比,这样用户不只是坐着等待。我无法想出一个聪明,准确的方法来实现这一目标。
我使用OleDBDataReader来运行我的查询,因此我无法知道数据的大小而无法点击每一条记录。
void doWork(object sender, DoWorkeventArgs e){
string connectionString = ".." // connection string
string query = "..." // query to run
OleDbConnection myConnection = new OleDbConnection(connectionString);
OleDbCommand myCommand = new OleDbCommand(query, myConnection);
myConnection.Open();
OleDbDataReader reader = myCommand.ExecuteReader();
try
{
Console.WriteLine(" -----------------------------------");
Console.WriteLine("Column Count: " + reader.FieldCount.ToString());
Console.WriteLine(reader.GetName(0) + ", " + reader.GetName(1) + ", " + reader.GetName(2));
int i = 0;
while (reader.Read())
{
Console.WriteLine(" -----------------------------------");
(sender as BackgroundWorker).ReportProgress(i++); // just testing ideas here
Console.WriteLine(reader.GetValue(0).ToString() + ", " + reader.GetValue(1).ToString() + ", " + reader.GetValue(2).ToString());
}
Console.WriteLine(" -----------------------------------");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
//Console.ReadLine();
}
finally
{
reader.Close();
myConnection.Close();
}
e.Result = returnedClients;
}
显然,跟踪每条记录的计数是无效的,因为在许多情况下,这将返回1000%+的进度。我可以在这里尝试一些其他的想法吗?