【发布时间】:2012-10-12 18:52:27
【问题描述】:
我只是想要一个不确定的进度条,它变得可见并显示一些“活动”以指示查询正在运行,然后,当查询通过时,它又回到不可见状态。看起来很简单;但使用此代码:
try
{
Cursor.Current = Cursors.WaitCursor;
progressBarChanges.Value = 50;
progressBarChanges.Step = 20;
progressBarChanges.Visible = true;
... // the meat of the code, where the query is being done, elided
} finally
{
progressBarChanges.Visible = false;
Cursor.Current = Cursors.Default;
}
...进度条永远不会显示,即使查询需要一段时间才能运行。进度条位于 DGV 上。我意识到我的进度代码有点蹩脚,但首先要做的是 - 我只想让该死的东西向初学者展示 something。
更新
在调用运行查询的 BackgroundWorker proc 之前,我将 progressBar 设置为可见方式:
progressBarChanges.Value = 50;
progressBarChanges.Step = 20;
progressBarChanges.Visible = true;
. . .
if (args.KeyCode == Keys.Enter)
{
if (ValidEntryForCRID(textBoxID.Text))
{
RetrieveAndBindPlatypusData();
var tb = (TextBox)Controls.Find("textBoxDuckbill", true).First();
if (tb != null)
{
tb.Focus();
}
if ((!string.IsNullOrWhiteSpace(textBoxID.Text)) &&
(backgroundWorkerShowChanges.IsBusy != true))
{
backgroundWorkerShowChanges.RunWorkerAsync();
}
. . .
...然而,progressBar 永远不会变得可见(除非在 DGV 的 DataSource 分配了返回的查询/结果集的 OracleDateTable 值之后,我从未将它设置回 visible = false)。如果我将其注释掉,那么它(迟来的)最终会出现,显然(错误地)认为“迟到总比没有好。”
有没有办法强制Windows“注意”“progressBarChanges.Visible = true;”马上线?类似 .ProcessMessages() 或 this.Refresh 或...???
【问题讨论】:
-
你记得开启进度条吗?
-
你为什么使用
progressBarChanges.PerformStep();? -
您可能必须在线程中执行该操作 - 否则您会用您的“肉”阻塞 UI 线程。
-
@Desolator:出于绝望。
-
@BDJ:默认启用(在设计时),我不会更改它。
标签: c# winforms progress-bar