国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

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

2020-01-24 03:00:58
字體:
供稿:網(wǎng)友

異步讀取數(shù)據(jù)庫,在數(shù)據(jù)綁定的時候會出現(xiàn)點問題,就是窗體界面會無法關(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ā)生錯誤,信息: " + 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ù)           

            }
        }

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

下面通過Invoke 來實現(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ā)生錯誤,信息: " + 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;
        }           

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 临颍县| 忻州市| 鄂托克前旗| 沈阳市| 会东县| 平顶山市| 大丰市| 江津市| 济阳县| 旬邑县| 石景山区| 麻阳| 台南县| 竹山县| 晋中市| 阿克苏市| 澎湖县| 湘潭市| 鄯善县| 江孜县| 交口县| 高州市| 沛县| 长泰县| 安乡县| 汝城县| 桂平市| 赤壁市| 吴江市| 和顺县| 合水县| 新安县| 德化县| 天津市| 仁寿县| 宣化县| 甘谷县| 阿荣旗| 隆德县| 宾川县| 马尔康县|