4

私は窓の形をしています。読み込み中の画像を1つ入れましたPictureBox

フォームをロードすると、設定しました

PictureBox1.Visible = false;

設定したボタンのクリックイベントを発生させている間

PictureBox1.Visible = true;

ただし、その場合、ストアド プロシージャを介してデータベースからデータを取得するコードがいくつかあります。

ストアド プロシージャからデータを取得するコードにジャンプすると、イメージのロードが停止します。

それは起こらないはずです。読み込み中と表示されるはずです。.gif 読み込みイメージを使用しました。

この問題を解決するにはどうすればよいですか?

4

3 に答える 3

4

eventHandler 内で長時間の呼び出しを行うたびに、BackgroundWorkerを使用する必要があります。BackgroundWorkerはコードを非同期で実行できるため、button_click eventHandler はワーカーの開始直後に終了します。

// add a BackGroundWorker bwLoadData to your form

private void YOURBUTTON_Click(object sender, EventArgs e)
{
     PictureBox1.Visible = true;
     bwLoadData.RunWorkerAsync();
}
private void bwLoadData_DoWork(object sender, DoWorkEventArgs e)
{
     // access your db, execute storedProcedue and store result to
     e.Result = YOUR_DATASET_RECORDS_OR_ANYTHING_ELSE;
}
private void bwLoadData_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
     if (e.Result != null)
     {
          // e.g. show data on form
     } else {
          // e.g. error message
     }
}
于 2012-08-24T06:30:42.797 に答える
2

ほとんどの場合、ストアド プロシージャの実行中に UI スレッドがブロックされます。データベースからデータをフェッチするためにa を使用できBackGroundWorkerます。これにより、別のスレッドが作成され、メイン スレッドがブロックされません。

または、スレッドを手動で作成し、それを使用してデータベースからデータを取得することもできます。Windows フォームでは、ベスト プラクティスとして、UI スレッドをブロックしないように、外部システム コールを実行するために別のスレッドを使用することをお勧めします。

バックグラウンドワーカーの使用

于 2012-08-24T06:15:03.673 に答える
0

これの考えられる理由は、イメージとデータの取得をロードすることによって同じスレッドを共有している可能性があります。そのため、データを取得するためにマルチスレッドまたは非同期呼び出しを試すことができます。ajax / javascipt Web ワーカーに関する以前の回答で申し訳ありません。Windows フォームについて言及したことを完全に無視しました。

于 2012-08-24T06:06:30.060 に答える