c#定时读取数据库显示在界面上,然后会很快的一闪一闪的,怎么消除这种闪烁呢,求大神帮帮忙啊。代码如下

privatevoidpTimer_Elapsed(objectsender,System.Timers.ElapsedEventArgse){dingshi();}pr... private void pTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
dingshi();
}
private void dingshi() //这个函数就是为了定时读取数据内容
{
if (i == 1)
{
DataTable dt = new DataTable();
DataSet dataset = new DataSet();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader read = cmd.ExecuteReader();
DataGridView dataGridView1 = new DataGridView();
dataGridView1.Update();
dt.Load(read);
this.dataGridView1.DataSource = dt;
this.dataGridView1.DataSource = null;
read.Close();
dataset.Clear();
}
else
{
DataTable dt_xx = (DataTable)dataGridView1.DataSource;
dt_xx.Rows.Clear();
dataGridView1.DataSource = dt_xx;
conn.Close();
}
}
private void button1_Click(object sender, EventArgs e)
{
if (i == 0)
{
conn.Open();
i = 1;
pTimer.Enabled = true;
}
else
{
i = 0;
pTimer.Enabled = false;

}
dingshi();
}
private void timer1_Tick(object sender, EventArgs e)
{
pTimer.Elapsed += pTimer_Elapsed;//委托,要执行的方法
pTimer.AutoReset = true;//获取该定时器自动执行
Control.CheckForIllegalCrossThreadCalls = false;//这个不太懂,有待研究
m = j.ToString();//以下三行仅仅是为了看下是不是定时刷新了
label1.Text = m;//
j++;//
}
this.dataGridView1.DataSource = dt;
这行单步调试运行会显示“索引超出范围.必须为非负值并小于集合大小.”
展开
 我来答
仉念霜UC
2016-06-19 · TA获得超过240个赞
知道小有建树答主
回答量:398
采纳率:0%
帮助的人:122万
展开全部
简单的办法是使用vs 组件Timer定时获取数据,在Timer组件的Tick方法中执行定时取数据的任务
然后根据你获取的数据绘制页面图形,具体绘制那些内容自己处理
追问
我是这么做的。但是吧,有个问题是新获取到的数据在存放进datagridview中,需要先清除datagridview里的数据再存入,否则就出现错误。但是一旦清除数据,这时候页面就会出现短时间的空白,一闪一闪的。这个问题怎么解决呢
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式