巧妙地计算BackgroundWorkers进度的方法

时间:2016-09-22 17:44:57

标签: c# backgroundworker

我有一个后台工作程序,它根据用户提供的参数执行可能需要大量时间(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%+的进度。我可以在这里尝试一些其他的想法吗?

0 个答案:

没有答案