问题描述
用C#处理一张大图,太大了,开了几个线程分几块处理,同时把这个大图显示在pictureBox里,然后就异常了,知道是主线程的UI拿住了这张图,但是奇怪的是,我把Bitmap.Clone出来给每个线程一块专用,还是会报异常!(Clone看来不能完全分离两个对象,不知道是不是如此?)我尝试new一个新的Bitmap是可以的,但是这样内存很危险(已经接近托管堆的极限了),还是想用线程锁来锁定这张图,但是尝试了一下lock(m_Map),单独锁住每个线程自己的那一份克隆,不行!求高手指点异常内容:对象当前正在其他地方使用。如果在使用GetHdc方法后使用Graphics对象,请调用ReleaseHdc方法。这将释放上一次调用Graphics对象的GetHdc方法时所获得的上下文句柄。
解决方案
本帖最后由 chenchao 于 2014-08-07 10:44:15 编辑
解决方案二:
自己顶一下!
解决方案三:
大图处理用指针操作bitmapdata。paint.net源码里有个还不错的多线程机制。话说回来,多线程并不能提升处理速度。一般cpu几个核开几个线程就够了。多了反而会慢。最后,GDI+2.0已经提供了部分显卡计算功能,会用的话,速度提升几个数量级。
时间: 2024-09-20 14:37:58