日期:2014-05-17  浏览次数:20825 次

关于C#多线程的问题
大家好,我想问个关于C#里面多线程的问题哈,我在Form1上有个按钮,按了之后响应事件启动了一个线程(线程A),线程A要完成一些比较费时间的事,中间要实时生成Chart,和不断更新Chart,由于在一个线程上创建的控件不能成为另一个线程上创建的控件的父级,所以在生成Chart的时候我又要用到委托,委托给另一个函数去生成Chart(委托A),于是程序就经常出问题了,经常发生InvalidOperationException,提示“对象当前正在其他地方使用。”,下面的疑难提示写的是“如果在使用GetHdc方法后使用Graphics对象,请调用ReleaseHdc方法。”,我想问问这是怎么回事啊?首先,问题并不是线程A引起的,是加了委托之后才出现的,其次委托A是很短的一个小函数,而且我设了标记变量了,用来标记它是不是运行完了,它没运行完的时候线程A应该是不会往下运行的,那这到底是怎么回事呢,还是实时更新Chart的时候程序自己又生成新的线程了呢?

------解决方案--------------------
多线程的时候还是加个锁吧。。。
------解决方案--------------------
还是不理解线程呀
------解决方案--------------------
控制UI的地方加锁加只会更卡,一般是对共享的数据须要串行访问才加锁
应该是把处理数据的逻辑放到后台线程中,用回调(委托)来显示结果

------解决方案--------------------
降低更新的频率,你上次更新未完成,使用的Graphics对象未来得及释放(也可能是因为被你加锁了导致无法释放),下次更新又要使用到它,因此报错。