首页 > 代码库 > LoadingBar

LoadingBar

      在系统中,如果在进行耗时的操作,一般都会通知UI告之用户操作正在进行。一般情况下可以设置Cursor来设置鼠标指标的图形来通知UI,但是这样看起来不会特别明显,所以显示一个比较明显的Loading Bar加载条是普遍的选择。

      耗时操作分为很多种,根据是否能得到完成的百分比分为"不可预知时间操作"(比如调用一个WEB服务,可能根据网络善状况的情况时间又不一样)和"可预知时间操作"(比如下载文件,可以根据已下载的字节数,来预知文件完成的百分比和大概的一个总的耗费时间)

      针对"不可预知时间操作"的情况,因为无知得知完成的百分比,所以只能显示一个Loading Bar告之用户操作正在进行,但是没法告之显示的百分比。由于ProgressBar不太美观而且不可能满足所有的要求,所以新建一个loadingView加载一个loading的图片,通知UI忙碌的时候即显示loadingView,操作完成则关闭loadingView。主页面代码如下

     

 1  public partial class Form1 : Form 2     { 3         private Thread t1 = null; 4  5         public Form1() 6         { 7             InitializeComponent(); 8         } 9 10         private void btn_Login_Click(object sender, EventArgs e)11         {12             //模拟耗时操作113             IsBusy(true);14             Thread.Sleep(1000);15             IsBusy(false);16             //模拟耗时操作217             IsBusy(true);18             Thread.Sleep(2000);19             IsBusy(false);20             //模拟耗时操作321             IsBusy(true);22             Thread.Sleep(3000);23             IsBusy(false);24         }25 26         /// <summary>27         /// 设置UI是否处于忙碌状态28         /// </summary>29         /// <param name="isBusy"></param>30         private void IsBusy(bool isBusy)31         {32           33             if (isBusy)34             {35                 this.Cursor = Cursors.WaitCursor;36 37                 //1.用线程来实现 38                 t1 = new Thread(new ThreadStart(new Action(() =>39                 {40                     LoadingView loading = new LoadingView();41                     loading.ShowDialog();42                 })));43                 t1.Start();44 45               46             }47             else48             {49                 this.Cursor = Cursors.Default;50 51                 //1.用线程来实现 52                 t1.Abort();53            54             }55         }56     }

    LoadingView只需要设定窗口大小与LoadingPic一样大即可,然后设定窗口的AutoSize = true,AutoSizeMode = GrowAndShrink.然后隐藏窗口标题和边框,使LoadingView看起来好像就是一个图片一样。