我只是想要一个不确定的进度条,它变得可见并显示一些“活动”以指示查询正在运行,然后,当查询完成时,又回到不可见状态。看起来很简单;但使用此代码:
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 上。我意识到我的进度代码有点蹩脚,但首先要做的是——我只是想让这该死的东西为初学者展示一些东西。
更新
在调用运行查询的 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 或...???