读书人

线程 刷新listview 有关问题

发布时间: 2012-05-29 12:16:00 作者: rapoo

线程 刷新listview 问题
刷新不了数据求指点。。。

C# code
 public delegate void listSet(ListViewItem s);        private void SetItem(ListViewItem s)        {            if (this.listView1.InvokeRequired)            {                listSet setitme = new listSet(SetItem);                this.BeginInvoke(setitme,new object[]{s});                return;            }            else            {                            listView1.Items.Add(s);            }        }        private void ThreadProc()        {            listView1.Items.Clear();            string sql = " select tw.*,b.gprs_number from dbo.Temp_WaterState as tw join basis_use_water_origin_rtu as b on  tw.T_ClientID=b.clientid";            DataSet dt = DHelper.GetDataSet(sql);            int cot = dt.Tables[0].Rows.Count;            for (int i = 0; i < cot; i++)            {                ListViewItem list = new ListViewItem();                list.SubItems.Clear();                list.Text = dt.Tables[0].Rows[i]["T_ClientID"] + "";                list.Tag = dt.Tables[0].Rows[i]["T_ClientID"] + "";                       list.SubItems.Add(DHelper.getName(dt.Tables[0].Rows[i]["T_ClientID"] + ""));                list.SubItems.Add(dt.Tables[0].Rows[i]["T_Time"] + "");                list.SubItems.Add(dt.Tables[0].Rows[i]["gprs_number"] + "");                list.SubItems.Add(DHelper.getKZQ(Convert.ToInt32(dt.Tables[0].Rows[i]["T_EquipState"])));                list.SubItems.Add(DHelper.getWL(Convert.ToInt32(dt.Tables[0].Rows[i]["T_GPRSState"])));                list.SubItems.Add(DHelper.getGD(Convert.ToInt32(dt.Tables[0].Rows[i]["T_PowerSupply"])));                list.SubItems.Add(DHelper.getM(Convert.ToInt32(dt.Tables[0].Rows[i]["T_OpenAlarm"])));                              SetItem(list);                                Thread.Sleep(500);            }            Thread.Sleep(5000);              }        private void go_Click(object sender, EventArgs e)        {            Thread th1 = new Thread(new ThreadStart(ThreadProc));            th1.Start();        }


[解决办法]
需要切换线程
ThreadProc 里面用 BeginInvoke  切换到 SetItem 函数, 所有对 ListView的操作都需要在 SetItem中完成
[解决办法]
怎么个刷新不了数据?是结束的时候一次性显示,还是根本不显示更新后的数据?
另外你的“listView1.Items.Clear();”没放到外面调用,获取数据还分好几次访问数据库,效率实在太低。
[解决办法]
线程访问控件要用委托
[解决办法]
探讨

线程访问控件要用委托

读书人网 >C#

热点推荐