C# 使用委托调用待待闪屏

程序开发难免会有大数据量操作,在操作大量数据时,有时候需用户等待,在这一段时间内既不想让用户点其它操作,又不像让用户感觉程序假死了。怎么办?对,就是要需使用一个等待的闪屏,告诉用户"数据读取中"旁边还有一个gif动画在转动。等到完成操作时,闪屏自动关闭。

接下来看看效果:

C# 使用委托调用待待闪屏_第1张图片

可能会有很多同学笑我了:这么简单的东西,还拿出来写?简单是简单了点儿,可是对于一个WinForm不熟悉的人来说却也费了不少周章。

再接下来是实现方式

1、简单的实体类。(PS:因为是个小Demo 这个实体就没怎么加注释,^_^)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Collections;

namespace Demo
{
    public class Product
    {
        public int ProductID { set; get; }
        public string ProductName { set; get; }
        public int Count { set; get; }
        public double Pice { set; get; }
        public string Uint { set; get; }
    }
}

2、等待闪屏:相对简单,没有代码。在窗体上拖了一个Lable控件 和一个PictureBox,把Lable的Text属性设置为:“数据读取中”并且改了一下字体样式,给PictureBox装载一个gif图像

3、主窗体:在主窗体上拉个网格控件(本Demo使用Developer Express的网格控件)、一个按钮:把按钮的Text属性改为 “读取”、一个BindingSource,
下面看主窗体的实现代码


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Data.Linq;
using System.Threading;

namespace devDemo
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            InitializeComponent();
        }
        frmLoading loading = new frmLoading();//闪屏窗体

        #region 委托
        /// 
        /// 关闭闪屏
        /// 
        public delegate void Closeloading();
        /// 
        /// 绑定数据
        /// 
        /// 数据列表
        public delegate void BindedData(List ls);
        #endregion

        private void FormMain_Load(object sender, EventArgs e)
        {
        }
        
        /// 
        /// 读取按钮点击事件
        /// 
        private void button1_Click(object sender, EventArgs e)
        {
            new Action(ReadData).BeginInvoke(new AsyncCallback(CloseLoading), null);
            loading.ShowDialog();//显示loading
        }

        /// 
        /// 读取数据
        /// 
        public void ReadData()
        {
            List productList = new List();
            //装载模拟数据
            for (int i = 0; i < 15; i++)
            {
                productList.Add(new Product
                {
                    ProductID = i + 1,
                    Count = new Random().Next(i * 10, 3000 / (i + 1)),
                    Pice = System.Math.Round(new Random().NextDouble() * (i + 1) * 100, 4),
                    Uint = "",
                    ProductName = string.Format("产品{0}", i)
                });
                Thread.Sleep(200);//每添加一条记录休息200毫秒
            }

            this.Invoke(new BindedData((pls) => { 
                //绑定数据
                this.protuctBindingSource.DataSource = pls; 
            }),productList);
        }

        /// 
        /// 关闭loading
        /// 
        /// 
        public void CloseLoading(IAsyncResult ar)
        {
            this.Invoke(new Closeloading(() => { loading.Close(); }));
        }
    }
}


你可能感兴趣的:(C# 使用委托调用待待闪屏)