最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c#異步讀取數(shù)據(jù)庫與異步更新ui的代碼實(shí)現(xiàn)

 更新時(shí)間:2013年12月09日 10:11:12   作者:  
這篇文章主要介紹了c#從數(shù)據(jù)庫里取得數(shù)據(jù)并異步更新ui的方法,大家參考使用吧

異步讀取數(shù)據(jù)庫,在數(shù)據(jù)綁定的時(shí)候會(huì)出現(xiàn)點(diǎn)問題,就是窗體界面會(huì)無法關(guān)閉,要結(jié)束任務(wù)才能結(jié)束進(jìn)程。例如下面代碼

首先按習(xí)慣的方法,設(shè)定線程更新UI

a2.CheckForIllegalCrossThreadCalls = false;  //a2為窗體名稱

下面的代碼就是從數(shù)據(jù)庫里取得數(shù)據(jù)并綁定

復(fù)制代碼 代碼如下:

private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con;
            SqlCommand com;
            try
            {
                con = new SqlConnection("UID=sa;Password=123;Initial Catalog=AD;Data Source=192.168.1.1;Asynchronous Processing=true");
                con.Open();
                com = new SqlCommand("select top 100 * from tb_user", con);
                com.BeginExecuteReader(new AsyncCallback(delDataBin), com);
            }
            catch (Exception ex)
            {
                MessageBox.Show("程序發(fā)生錯(cuò)誤,信息: " + ex.Message);
            }

        }

        private void delDataBin(IAsyncResult ar)
        {
            if (ar.IsCompleted)
            {
                SqlCommand com = (SqlCommand)ar.AsyncState;
                SqlDataReader dr = com.EndExecuteReader(ar);
                DataTable dt = new DataTable();
                dt.Load(dr);
                dr.Close();

                this.dataGridView1.DataSource = dt;  //綁定數(shù)據(jù)           

            }
        }

到這里完成的綁定的工作,運(yùn)行查看一下效果,其實(shí)這樣是會(huì)出現(xiàn)窗體假死的現(xiàn)象。

下面通過Invoke 來實(shí)現(xiàn)

首先聲明委托  public delegate void updateDG(DataTable dt);

然后通過dataBin來綁定DataGridView

復(fù)制代碼 代碼如下:

        public void dataBin(DataTable dt)
        {
            dataGridView1.DataSource = dt;
            return;
        } 

在線程里面調(diào)用下面方法

復(fù)制代碼 代碼如下:

//綁定數(shù)據(jù)
                if (this.InvokeRequired)
                {
                    updateDG ur = new updateDG(dataBin);
                    this.Invoke(ur, dt);
                }

完整的代碼如下:

復(fù)制代碼 代碼如下:

        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con;
            SqlCommand com;
            try
            {
                con = new SqlConnection("UID=sa;Password=123;Initial Catalog=AD;Data Source=192.168.1.1;Asynchronous Processing=true");
                con.Open();
                com = new SqlCommand("select top 100 * from tb_user", con);
                com.BeginExecuteReader(new AsyncCallback(delDataBin), com);
            }
            catch (Exception ex)
            {
                MessageBox.Show("程序發(fā)生錯(cuò)誤,信息: " + ex.Message);
            }

        }

        private void delDataBin(IAsyncResult ar)
        {
            if (ar.IsCompleted)
            {
                SqlCommand com = (SqlCommand)ar.AsyncState;
                SqlDataReader dr = com.EndExecuteReader(ar);
                DataTable dt = new DataTable();
                dt.Load(dr);
                dr.Close();

                //this.dataGridView1.DataSource = dt;//綁定數(shù)據(jù)

                if (this.InvokeRequired)
                {
                    updateDG ur = new updateDG(dataBin);
                    this.Invoke(ur, dt);
                }
            }
        }

        public delegate void updateDG(DataTable dt);

        public void dataBin(DataTable dt)
        {
            dataGridView1.DataSource = dt;
            return;
        }           

查運(yùn)行查看一下,你就會(huì)發(fā)現(xiàn)結(jié)果了

相關(guān)文章

  • C#實(shí)現(xiàn)將Word轉(zhuǎn)化分享為電子期刊

    C#實(shí)現(xiàn)將Word轉(zhuǎn)化分享為電子期刊

    曾經(jīng)由一個(gè)項(xiàng)目,要求實(shí)現(xiàn)制作電子期刊定期發(fā)送給企業(yè)進(jìn)行閱讀,由編輯人員使用 Microsoft Word先生成PDF文件,然后將生成的PDF文件轉(zhuǎn)化為JPEG文件,最后將JPEG文件生成電子書模式,本文給大家介紹了C#實(shí)現(xiàn)將Word轉(zhuǎn)化分享為電子期刊,需要的朋友可以參考下
    2023-12-12
  • C#?窗口過程消息處理?WndProc的方法詳解

    C#?窗口過程消息處理?WndProc的方法詳解

    在WinForm中一般采用重寫WndProc的方法對窗口或控件接受到的指定消息進(jìn)行處理,本文給大家介紹C#窗口過程消息處理WndProc的方法詳解,感興趣的朋友一起看看吧
    2025-04-04
  • Unity實(shí)現(xiàn)簡單場景分層移動(dòng)

    Unity實(shí)現(xiàn)簡單場景分層移動(dòng)

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)簡單場景分層移動(dòng),分為前景、場景、背景等,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Unity實(shí)現(xiàn)注冊登錄模塊

    Unity實(shí)現(xiàn)注冊登錄模塊

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)注冊登錄模塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Visual Studio C#創(chuàng)建windows服務(wù)程序

    Visual Studio C#創(chuàng)建windows服務(wù)程序

    用Visual C#創(chuàng)建Windows服務(wù)不是一件困難的事,本文就將指導(dǎo)你一步一步創(chuàng)建一個(gè)Windows服務(wù)并使用它,本文主要介紹了Visual Studio C#創(chuàng)建windows服務(wù)程序,感興趣的可以了解一下
    2024-01-01
  • 詳解如何在ASP.NET Core配置請求超時(shí)中間件

    詳解如何在ASP.NET Core配置請求超時(shí)中間件

    本文參考官方文檔,為大家詳細(xì)介紹如何使用Asp.net core 8.0 的最小API 模板項(xiàng)目,配置超時(shí)中間件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2024-01-01
  • C#編程中設(shè)置程序只可被運(yùn)行一次的方法

    C#編程中設(shè)置程序只可被運(yùn)行一次的方法

    這篇文章主要介紹了C#編程中設(shè)置程序只可被運(yùn)行一次的方法,包括一種讓程序自動(dòng)重啟以限制第二次被運(yùn)行的方法,需要的朋友可以參考下
    2015-11-11
  • c#生成驗(yàn)證碼程序

    c#生成驗(yàn)證碼程序

    這篇文章主要介紹了使用c#生成驗(yàn)證碼的示例,大家參考使用吧
    2014-01-01
  • C#多線程與異步的區(qū)別詳解

    C#多線程與異步的區(qū)別詳解

    多線程和異步操作兩者都可以達(dá)到避免調(diào)用線程阻塞的目的,從而提高軟件的可響應(yīng)性。甚至有些時(shí)候我們就認(rèn)為多線程和異步操作是等同的概念。但是,多線程和異步操作還是有一些區(qū)別的。而這些區(qū)別造成了使用多線程和異步操作的時(shí)機(jī)的區(qū)別
    2017-06-06
  • C#實(shí)現(xiàn)將程序鎖定到Win7任務(wù)欄的方法

    C#實(shí)現(xiàn)將程序鎖定到Win7任務(wù)欄的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)將程序鎖定到Win7任務(wù)欄的方法,涉及C#調(diào)用Shell類的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08

最新評論

隆尧县| 眉山市| 通河县| 怀来县| 宜兰市| 福鼎市| 清苑县| 罗江县| 南雄市| 桂阳县| 永春县| 华亭县| 合阳县| 蓬安县| 石楼县| 濮阳市| 寿阳县| 平和县| 丹江口市| 安仁县| 宝丰县| 银川市| 潼南县| 遂宁市| 县级市| 池州市| 临漳县| 旬阳县| 南阳市| 肇州县| 张家口市| 图木舒克市| 邮箱| 会宁县| 沙田区| 津市市| 凤翔县| 亳州市| 彭水| 汉源县| 凌源市|