BackgroundWorker问题(C#Windows窗体)

2 .net c# mysql backgroundworker winforms

我在MSDN上阅读有关BackgroundWorker类的内容,我对它是如何工作有疑问.

以下代码中有一个for循环.在for循环内部,在else子句中,您应该:

执行耗时的操作并报告进度.

但是,为什么有一个for循环,为什么它的最大值只有10?

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker worker = sender as BackgroundWorker;

    for (int i = 1; (i <= 10); i++)
    {
        if ((worker.CancellationPending == true))
        {
            e.Cancel = true;
            break;
        }
        else
        {
            // Perform a time consuming operation and report progress.
            System.Threading.Thread.Sleep(500);
            worker.ReportProgress((i * 10));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个非常庞大的数据库,有时需要一分钟才能根据某些标准检查新订单.我不想猜测完成查询需要多长时间,我想要实际的进展.如何根据MySQL SELECT查询使后台工作程序报告进度?

ang*_*son 5

如何根据MySQL SELECT查询使后台工作程序报告进度?

你不能.这是同步方法调用的一个问题,你无法提前预测需要多长时间.你有两个切割时间来处理.在调用方法之前,以及调用方法之后.你之间没有任何关系.方法已经返回,或者没有.

您可以使用统计数据来获得优势.您可以记录每次执行所需的时间,存储它,并使用它来计算预测,但它永远不会准确.通过这样的预测,您可以相应地分配进度报告,以便在您计算的统计预测处或附近达到100%.

但是,如果数据库比平常更慢或更快,它将会关闭.

另请注意,调用MySQL检索数据的任何线程都不能与报告进度的线程相同,因为它将"等待"MySQL数据库和与之对话的.NET代码返回数据,一体化.你需要启动另一个报告进度的线程.