日期:2014-05-17  浏览次数:21060 次

Winform程序下Datagridview的使用问题。
我在winform下加了一个datagridview控件,想让他显示本地数据库中的一个表内容。我绑定了数据源,如图
[img=http://b251.photo.store.qq.com/psb?/V13E5cTC2ZosjS/BRDm11PZEGfrnfjCtmIk.zi52WTBXIt9E9QTAdhwrYU!/b/dESvoZX.CQAA&bo=7gEkAew!][/img]

因为表格中的数据是不断变化的,所以我想让表格中的数据每5秒刷新一下。显示当前表格中的内容。
所以,我在load中添加了一个线程,让他执行刷新事件。线程代码如下

          //启动 短信记录刷新 线程名称为 newthread3
          newthread3 = new Thread(new ThreadStart(t_record_flash));
          newthread3.IsBackground = true; 
          newthread3.Start();


定义了t_record_flash()

public void t_record_flash( ) //短信记录刷新事件
        {
            while (true)
            {
                try
                {
                    this.t_historyTableAdapter.Fill(this.messageMedomDataSet.t_history);
                }
                catch(System.Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                }
                Thread.Sleep(5000); //5秒之后再次执行该时间,不停刷新
            }
        }


现在我运行程序,会出现如下图错误。
[img=http://b251.photo.store.qq.com/psb?/V13E5cTC2ZosjS/8m5kPD7HSF376sQrgUao*x8yK*cbaMqCIK19GsxYv9Q!/b/dFo1o5X9CgAA&bo=fgGqAPM!][/img]

。。但是如果我在  While(true)处打上断点,一步一步执行,也没发现什么错误啊。。。求大神 谢谢

------解决方案--------------------
你所说的功能没有必要用线程来实现啊,用一个TIMER就行了。而且我实现起来更加简单
------解决方案--------------------
用TIMER吧,不用考虑访问UI线程的问题
------解决方案--------------------

这个是数据绑定错误,不是流程上面的。
------解决方案--------------------
trimer 啊..........在trimer中重新绑定数据库就得了...或者你要是觉得你的方法可行,就在你的方法中重新绑定数据吧.
------解决方案--------------------
一个事件中多次改变UI显示的内容,UI显示的内容只会接受第一次后最后一次事件改变的结果。因此你在每次事件结束,强制刷新一下UI。datagridview.Refresh();
------解决方案--------------------
如果不用自动刷新数据 第一次绑定数据会有问题吗
------解决方案--------------------
引用:
一个事件中多次改变UI显示的内容,UI显示的内容只会接受第一次后最后一次事件改变的结果。因此你在每次事件结束,强制刷新一下UI。datagridview.Refresh();

这样做重绘也很可能报出异常。
------解决方案--------------------