楼上的大神,在为我在另一个Form中将会平凡的画图,如果在界面中点击过快的话会影响到界面的响应,所以我就做了第二个线程!

解决方案 »

  1.   

    Control.CheckForIllegalCrossThreadCalls默认在调式的时候为true,就是因为在另一个线程对UI操作会导致问题,这样方便找到错误。UI是基于消息循环的单线程设计,不是你没写在主线程操作UI的代码,其它线程对UI操作就没有操作了。主线程在不断的处理消息,就算在其它线程发起UI操作,实际的画法也是在主线程处理WM_PAINT消息时完成的,而运行画法的代码时因为其他线程对UI的操作不一定完成,很可能控件内部的状态都不对。这只是一种问题,还有其他,所以不要在其它线程操作UI。
      

  2.   

    首先的问题是,为什么要连续点击画图按键?这不是常规的操作方式,一般都是其它线程生成或者获取数据,然后Invoke调度UI操作到主线程执行,人来控制开始和结束,没有让人不停点击来操作的。
      

  3.   


    我用.net自带的Chart控件试过,没有发现你所说的问题。
    如果绘图频繁到影响界面响应的话,我想你最好考虑一下降低频率,这种跨线程操作控件的方法并不可靠,看下MSDN里的说明:
    一般情况下,耗时的操作都在IO上,所以通常在新的线程里只做数据收集的工作,而界面的绘制仍旧是在主线程里完成。如果影响到界面响应,那可能是更新的频率过高,其实这样的频率人看了也不舒服,你想想,如果你的数据变动很大,那最后看到的就只有色块在屏幕上跳舞。
      

  4.   

    问题并不在BackgroundWork上面,而应该在你的设计方面,再仔细想想应该怎么做一次彻底改变吧。
      

  5.   

    永远不要写 CheckForIllegalCrossThreadCalls = false; 这种代码。