大家好,我又来了。其实很不好意思,因为感觉自己弄了两个多月,还是啥都不会一样。
但各种尝试后,实在没辙了,只能来这里求助了。
容我先描述下我要做的东西:
一个winform界面,主要考虑两部分:
1.车(图片)的移动。
2.实时的从数据库中读取信息(每50ms读一次,并与上一次的数据比较,若不同,则在界面上的label显示相关的内容)
所以我的想法是设置三个timer1:
timer1:控制车的移动(我用的是改变图片坐标的方法,像这样:this.pictureBox1.Left -= 10;)
timer2:从数据库中读取表1的一个id,并判断如果id与上次的不一样,则表示可以读其他表里的数据。
timer3:读取数据库中其他的表(每50ms读一次),并判断如果与上次读的值不一样,就输出到界面里。
问题是:当我加了读数据库的timer后,画面就变的顿卡,效果如下:
只有timer1的时候:(此时图片移动很流畅)
————————————分割线————————————————————
————————————分割线————————————————————
————————————分割线————————————————————
————————————分割线————————————————————
加了timer3之后:(顿卡)
我自己想过的解决办法有:
将timer3换成异步定时器,但是读数据库的时候总是出错,一会说和DataReader已关闭需要打开,一会说Datareader已打开需要关闭。我猜的原因是主线程里也有读取数据库的数据,二者是不是串了,但也不知道怎么办,最终没能解决。
我咨询老师的办法:
老师说我移动图片的思路有问题,让我用Graphics重绘+双缓冲的方法移动图片。我试着弄了下,但想不出来怎么用这种方法移动图片。
我现在是在继续想用Graphics重绘的方法如何循环移动图片,但我不知道这种方法能不能最终解决问题。
所以我想来这里求助大家,大家有什么办法吗?