熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#使用委托調用實現用戶端等待閃屏

2013-11-13 10:23:44  來源: .NET編程 


    以前總在博客園看別人寫的博客這是我第一次寫技術博客竟然不知道如何開始在此向博客園裡各位辛勤耕耘的各位博主致敬
    我以前開發 程序較多少有接觸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();  
    }  
    frmLoading loading = newfrmLoading();//閃屏窗體  
    #region委托  
    ///<summary>  
    ///關閉閃屏///</summary>  
     publicdelegatevoidCloseloading();  
    ///<summary>  
    ///綁定數據///</summary>  
    ///<param name=ls>數據列表</param>  
     publicdelegatevoidBindedData(List<Product> ls);  
    #endregion  
    privatevoidFormMain_Load(objectsender EventArgs e)  
    {  
    }  
    ///<summary>  
    ///讀取按鈕點擊事件///</summary>  
     privatevoidbutton_Click(objectsender EventArgs e)  
    {  
    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>  
    ///<param name=ar></param>  
    publicvoidCloseLoading(IAsyncResult ar)  
    {  
    thisInvoke(newCloseloading(() => { loadingClose(); }));  
    }  
    }  

  至此這個Demo完成若有不足之處或是有更好的方式歡迎提出

  另外寫技術博客真不容易佩服那些一直更新自己博客的老師們


From:http://tw.wingwit.com/Article/program/net/201311/13480.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.