在自定义控件的时候有一个问题就是如果直接放在重绘的事件之中的话拖出屏幕外面在拖回来就会很卡(可能是我没有找对方法),我就想到了用一个管理器来控制这些控件的重绘让他们排序不会因为严重 重复的绘制而导致的卡顿,这个问题我在网上找过,但是没找到(可能是本人的上网姿势不正确导致的)已下方法仅供参考,如有错误或者更好的方法请大神指出。(还要补充一点:在本站上下载的例子都是很卡)
1首先创建一个winform工程
2新建一个用户自定义控件
3新建一个名字为重绘管理器的类(后面我又把这个类给封装起来了 在那个类库里边)
4在 管理器类里边创建静态的Graphics类 和list<data>链表
5创建管理的线程
6在自定义线程里边建立自定义事件用来把自身要绘制的事件发送到管理器 里边要传入自身和绘制的内容
7在管理器里边接受事件添加到list链表里边
8在管理器里边开启线程处理list链表的事务
9在自定义控件里边再创建一个用来发送给主线程绘制到主界面的事件
10把这些控件拖到窗口中
上面说的可能有点乱 其实原理就是:
一个链表先把重绘的信息存下(判断是否重复如果重复就不添加)来同时一个线程开始绘制图形(我这里是先把要绘制的内容绘制到image中在用主线程绘制到界面),绘制完成一个就移除一个,知道完成为止
下面是运行的程序
不多比比 很简单 但是我觉得还是很重要的 附上源码
|
-
-
GDI 重绘管理试验.zip
87.48 KB, 下载次数: 4, 下载积分: 金钱 -1
售价: 3 金钱 [记录]
c#自定义用户控件的重绘管理器,窗体拖出屏幕以后再拖回...
|