现在我起了一个线程对Panel进行绘图,可是当panel的onPaint方法触发时(我在onPaint方法中加入了绘图代码),经常发生抢Graphics资源问题,报Object   is   in   use   错误。
请问有没有什么好的方法来处理多线程抢Graphics的问题。谢谢。

解决方案 »

  1.   

    如果只在onPaint方法中绘图,不会发生同步(抢资源)问题。可能你要贴代码了。
      

  2.   

    一般的情况实在需要Graphics操作的地方加并发锁
    还是得看具体代码
      

  3.   

            private void mainPanel_Paint(object sender, PaintEventArgs e)
            { 
                   //重绘bitmap
                    if (bit != null && !graLockFlag)
                    {
                        Graphics graw = mainPanel.CreateGraphics();
                        graw.DrawImage(bit, new Point(0, 0)); // 对已经存在的bitmap绘图
                        graw.Dispose();
                    }
            }然后就是线程中调用 Draw()方法,里面进行了复杂的绘图,最终也是将bitmap绘制到mainPanel上
      

  4.   

           private void mainPanel_Paint(object sender, PaintEventArgs e) 
            { 
                    if (bit != null && !graLockFlag) 
                    { 
                        e.Graphic.DrawImage(bit, new Point(0, 0)); 
                    } 
            } 
      

  5.   


    线程不应该中调用Draw()方法。
    它应该准备好你的那个bit图,然后要求mainPanel重画:
    {
       bit = ...;
       mainPanel.Invalidate();
    }