创建一个加载栏

时间:2017-10-06 07:46:30

标签: c#

我想创建一个简单的加载栏。所以我在表单上放了两个PictureBox。一个用于覆盖整个表单,一个用于显示居中的加载旋转(具有Image属性)。

我想在加载程序时使用此加载栏(以及运行某些繁重的任务时)。

但是在加载表单时没有显示加载旋转。顺便说一下,整个表格在装载过程中是空的。

我该如何解决?如果我能......

我没有代码,但下面有一个示例:

 private void Form1_Shown(object sender, EventArgs e)
    {
        Thread.Sleep(3000); //some heavy task
    }

enter image description here

2 个答案:

答案 0 :(得分:5)

在事件处理程序中放置Thread.Sleep(或任何长时间运行的代码)将阻止UI,直到该事件处理程序运行完其代码为止。

您必须将此类代码放在BackgroundWorkerThreadTask中,并异步运行该代码。通过这种方式,代码可以独立于UI运行,这将使UI响应。

答案 1 :(得分:0)

我建议使用async和await。这使得可以让其他任务在后台工作,而ui仍然可以响应。

using System.Threading.Tasks;

private async void Form1_Shown(object sender, EventArgs e)
{
    // Start the loading animation here

    await Task.Run(() =>
    {
        // Do work here!
    });

    // When the task is complete, stop the loading animation
}

请注意,在我的示例中,在任务中完成的所有内容都是在另一个线程上完成的,因此我建议您也要了解多线程。