【问题标题】:Loading image stops issue加载图像停止问题
【发布时间】:2012-08-24 14:30:42
【问题描述】:

我有 windows 窗体。我在PictureBox中放了一张加载图片

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

PictureBox1.Visible = false;

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

PictureBox1.Visible = true;

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

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

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

我该如何解决这个问题?

【问题讨论】:

    标签: c# winforms loading


    【解决方案1】:

    每当您在 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)
         {
              // e.g. show data on form
         } else {
              // e.g. error message
         }
    }
    

    【讨论】:

      【解决方案2】:

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

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

      backgroundworker usage

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        猜你喜欢
        • 2012-10-22
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 2014-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多