加载图片会停止发布

我有窗体。 我在PictureBox放了一个加载图像

当我加载表单然后我已经设置

 PictureBox1.Visible = false; 

当我触发按钮的点击事件我已经设置

 PictureBox1.Visible = true; 

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

当它将跳转到代码以从存储过程中检索加载图像停止加载的数据。

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

我该如何解决这个问题?

每当你在eventHandler中进行长时间的通话时,你应该使用BackgroundWorker ! BackgroundWorker 可以运行代码异步 ,因此你的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) { // eg show data on form } else { // eg error message } } 

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

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

backgroundworker用法

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