在系统中,如果在进行耗时的操作,一般都会通知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 //模拟耗时操作1 13 IsBusy(true); 14 Thread.Sleep(1000); 15 IsBusy(false); 16 //模拟耗时操作2 17 IsBusy(true); 18 Thread.Sleep(2000); 19 IsBusy(false); 20 //模拟耗时操作3 21 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 else 48 { 49 this.Cursor = Cursors.Default; 50 51 //1.用线程来实现 52 t1.Abort(); 53 54 } 55 } 56 }
LoadingView只需要设定窗口大小与LoadingPic一样大即可,然后设定窗口的AutoSize = true,AutoSizeMode = GrowAndShrink.然后隐藏窗口标题和边框,使LoadingView看起来好像就是一个图片一样。
时间: 2024-11-13 23:11:24