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查询使后台工作程序报告进度?
如何根据MySQL SELECT查询使后台工作程序报告进度?
你不能.这是同步方法调用的一个问题,你无法提前预测需要多长时间.你有两个切割时间来处理.在调用方法之前,以及调用方法之后.你之间没有任何关系.方法已经返回,或者没有.
您可以使用统计数据来获得优势.您可以记录每次执行所需的时间,存储它,并使用它来计算预测,但它永远不会准确.通过这样的预测,您可以相应地分配进度报告,以便在您计算的统计预测处或附近达到100%.
但是,如果数据库比平常更慢或更快,它将会关闭.
另请注意,调用MySQL检索数据的任何线程都不能与报告进度的线程相同,因为它将"等待"MySQL数据库和与之对话的.NET代码返回数据,一体化.你需要启动另一个报告进度的线程.
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |