表示され、クエリが実行されていることを示す「アクティビティ」を示す非決定論的なプログレスバーが必要です。クエリが完了すると、非表示に戻ります。十分に単純に思えます。しかし、このコードでは:
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 プロシージャを呼び出す前に、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 または ...??? のようなもの