昨天晚上快睡觉的时候,闲鱼遇到一个买家来询问PictureBox遇到"对象当前正在其他地方使用"错误。但是又无法给源码,只说了是多线程显示图片,而且频繁切换图片,所以不好确定原因。从错误的描述来看应该就是抢夺资源造成的,可能是图片资源也可能是控件资源。因为没有代码也无法立刻给解决问题。所以今天早上特地试着写了一下,终于复现了这个错误。
1.错误示范
2个线程,操作同一个picturebox,而且同时调用,再写个延时,让2个线程错开来。没跑几秒就出现了这个错误。2个线程在同一时刻抢夺控件造成的问题。而且运行时间久了必然会造成内存溢出的问题。
2.正确写法
当多线程控制同一个picturebox时,在赋值过程中,锁定控件,以免造成抢夺的情况。经过实验,跑了10分钟没问题。而且显示更及时。
总结
可能遇到这个错误没有多线程控制同一个控件,那就需要看看是不是用到了同一个流或者同一张图片,一切共用的资源都会被抢夺。
有问题可联系qq1124391467