我从本地C#.NET Winform应用程序在线连接到mysql数据库。我希望在应用程序连接到在线数据库之前显示进度条,并且一旦建立数据库连接,进度条也应该完成递增。
请帮助代码。 如何获取应用程序连接到在线数据库所花费的时间,然后将该时间设置为进度条的INTERVAL?
答案 0 :(得分:2)
为什么不在查询开始执行之前更改ProgressBar样式以使行变为线性,而不是在结束时您可以在块中更改ProgressBar样式并给予Progressbar.Value = 100;
。
答案 1 :(得分:1)
如果我读得正确,你想让一个进度条不断地反复填写,直到建立与数据库的连接(因为不知道连接在完成之前需要多长时间)
如果是这种情况,您可以使用计时器/后台工作人员来完成这项工作。 Sudo代码:
Timer a= new Timer();
a.Tick += TickMethod;
a.interval = 2;
BackgroundWorker b = new BackgroundWorker();
b.DoWork += BackgroundMethod();
b.WorkComplete += WorkDone();
void Start()
{
a.Start();
b.RunAsync();
}
void TickMethod()
{
if(progressBar.Value == progressBar.Max)
progressBar.Value = 0;
progresssBar.Step();
}
void BackgroundMethod(object s, Args e)
{
MakeConnection();
}
void WorkDone()
{
a.Stop();
progressBar.Value = progressBar.Max();
}
如果那不是你想要的,我很抱歉。
答案 2 :(得分:0)
使用进度条进行不确定时间操作的“正确”方法是将其设置为选框模式。这显示了具有动画“闪耀”效果的条形图,表明发生了某些事情,但没有显示实际的进度条(因为您不知道需要多长时间,您无法估计完成的百分比)。连接后,您可以将进度条的Value
设置为Max
,使其移至100%。
在获取网页时,在某些版本的IE中使用了另一种方法。这表明进度条在很长一段时间内缓慢增加到100%(预定的时间范围足够长以覆盖最坏的情况 - 例如在您的情况下,您可能选择30秒,因为这通常是用于连接失败的超时时间无论如何)。最后建立连接后,然后将条形推进到100%。这给人留下了在等待时取得进步的印象,只要你对最坏情况的估计是合理的,这将会产生良好的效果。
然而,注意 .net进度条不会立即跳转到一个新值 - 它们会动画以便“增长”到所请求的值,所以如果它必须从0%开始在它实际显示100%之前需要一两秒才能达到100%。这可能意味着(例如)您的窗口关闭,而进度条仅显示20%的值,这非常令人恼火,因为它使用户认为它以某种方式失败。有两种解决方案:
1)让您的应用程序暂停(例如,让线程休眠)一段“足够长的时间”,确保进度条达到100%。这会在操作结束时增加几秒钟的额外延迟,并且所需的时间可能相当不可预测,因此它不是一个很好的解决方案,特别是如果数据库提取通常很快。
2)强制进度条“跳”到100%而不是慢慢增长到100%。您可以通过设置Value = Max; Value = Max-1; Value = Max
来完成此操作。当要求进度条以这种方式“向后”时(对于Max-1)它没有动画,但会立即更新以显示所请求的值。