加载图片会停止发布

时间:2012-08-24 06:00:09

标签: c# winforms loading

我有窗体。我在PictureBox

中放了一个加载图片

当我加载表单时,我已设置

PictureBox1.Visible = false;

当我点击按钮的点击事件时,我已经设置了

PictureBox1.Visible = true;

但是在那种情况下,有一些代码可以通过存储过程从数据库中检索数据。

当它跳转到用于从存储过程检索数据的代码时,加载图像停止加载。

不应该发生。它应该显示为加载。我使用.gif加载图片。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

每次在eventHandler中进行长时间的通话时,您都应该使用 BackgroundWorker ! BackgroundWorker 可以运行代码async ,因此你的button_click eventHandler将在启动worker之后立即结束。

// 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
     }
}

答案 1 :(得分:2)

最有可能的是,在运行存储过程时,UI线程被阻止。您可以使用BackGroundWorker来从数据库中获取数据,这会创建另一个线程并且不会阻止您的主线程。

或者您可以手动创建线程并使用它从数据库中检索数据。 在Windows窗体中,作为最佳实践,最好使用另一个线程来运行外部系统调用,以免阻塞UI线程。

backgroundworker usage

答案 2 :(得分:0)

可能的原因可能是通过加载图像和数据检索来共享相同的线程。因此,您可以尝试使用多线程或异步调用来获取数据。对于以前关于ajax / javascipt web worker的回答,我完全忽略了你提到的windows窗体。