c#

位置:IT落伍者 >> c# >> 浏览文章

C#使用委托调用实现用户端等待闪屏


发布日期:2019年01月06日
 
C#使用委托调用实现用户端等待闪屏

以前总在博客园看别人写的博客这是我第一次写技术博客竟然不知道如何开始在此向博客园里各位辛勤耕耘的各位博主致敬

我以前开发 程序较多少有接触WinForm最近调换了工作也有机会接触WinForm首先做WinForm的感觉像是客场作战好多东西都不大熟悉所以要加强努力

废话少说进入正题首先说说场景

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

接下来看看效果

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

再接下来是实现方式

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

    usingSystem;

    usingSystemCollectionsGeneric;

    usingSystemLinq;

    usingSystemText;

    usingSystemComponentModel;

    usingSystemCollections;

    namespaceDemo

    {

    publicclassProduct

    {

    publicintProductID{set;get;}

    publicstringProductName{set;get;}

    publicintCount{set;get;}

    publicdoublePice{set;get;}

    publicstringUint{set;get;}

    }

    }

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

主窗体在主窗体上拉个网格控件(本Demo使用Developer Express的网格控件)一个按钮把按钮的Text属性改为 读取一个BindingSource

下面看主窗体的实现代码

    usingSystem;

    usingSystemCollectionsGeneric;

    usingSystemComponentModel;

    usingSystemData;

    usingSystemDrawing;

    usingSystemText;

    usingSystemWindowsForms;

    usingDevExpressXtraEditors;

    usingSystemDataLinq;

    usingSystemThreading;

    namespacedevDemo

    {

    publicpartialclassFormMain:Form

    {

    publicFormMain()

    {

    InitializeComponent();

    }

    frmLoadingloading=newfrmLoading();//闪屏窗体

    #region委托

    ///<summary>

    ///关闭闪屏///</summary>

    publicdelegatevoidCloseloading();

    ///<summary>

    ///绑定数据///</summary>

    ///<paramname=ls>数据列表</param>

    publicdelegatevoidBindedData(List<Product>ls);

    #endregion

    privatevoidFormMain_Load(objectsenderEventArgse)

    {

    }

    ///<summary>

    ///读取按钮点击事件///</summary>

    privatevoidbutton_Click(objectsenderEventArgse)

    {

    newAction(ReadData)BeginInvoke(newAsyncCallback(CloseLoading)null);

    loadingShowDialog();//显示loading

    }

    ///<summary>

    ///读取数据///</summary>

    publicvoidReadData()

    {

    List<Product>productList=newList<Product>();

    //装载模拟数据

    for(inti=;i<;i++)

    {

    productListAdd(newProduct

    {

    ProductID=i+

    Count=newRandom()Next(i*/(i+))

    Pice=SystemMathRound(newRandom()NextDouble()*(i+)*)

    Uint=

    ProductName=stringFormat(产品{}i)

    });

    ThreadSleep();//每添加一条记录休息毫秒

    }

    thisInvoke(newBindedData((pls)=>{

    //绑定数据

    thisprotuctBindingSourceDataSource=pls;

    })productList);

    }

    ///<summary>

    ///关闭loading///</summary>

    ///<paramname=ar></param>

    publicvoidCloseLoading(IAsyncResultar)

    {

    thisInvoke(newCloseloading(()=>{loadingClose();}));

    }

    }

    }

至此这个Demo完成若有不足之处或是有更好的方式欢迎提出

另外写技术博客真不容易佩服那些一直更新自己博客的老师们

上一篇:Visual C#或Visual Basic创建Web应用程序(下)

下一篇:Visual C#多线程参数传递浅析