none
[.net winform]我画图时,如果绘制时间比较长的话,就会出现无响应的情况,然后就绘制失败了 RRS feed

  • 问题

  •         Dim formGraphics As System.Drawing.Graphics  
            formGraphics = Label1.CreateGraphics()  
            Dim x As Long, y As Long 
            x = Label1.Width \ Val(HScrollBar1.Value)  
            y = Label1.Height \ Val(HScrollBar1.Value)  
            Dim penwidth As Single 
            penwidth = HScrollBar1.Value / 2  
            Dim myPen As New Pen(Color.Black, penwidth)  
            myPen.Width = HScrollBar1.Value  
            For i = 0 To x - 1  
                For j = 0 To y - 1  
                    If 主窗体.arr5(j Mod (主窗体.hz), i Mod (主窗体.cz)) = 1 Then 
                        myPen.Color = 主窗体.colory(j Mod (主窗体.hz))  
                        formGraphics.DrawLine(myPen, i * HScrollBar1.Value, j * HScrollBar1.Value + penwidth, (i + 1) * HScrollBar1.Value, j * HScrollBar1.Value + penwidth)  
                    Else 
                        myPen.Color = 主窗体.colorx(i Mod (主窗体.cz))  
                        formGraphics.DrawLine(myPen, i * HScrollBar1.Value, j * HScrollBar1.Value + penwidth, (i + 1) * HScrollBar1.Value, j * HScrollBar1.Value + penwidth)  
                    End If 
                Next 
            Next 
            myPen.Dispose()  
            formGraphics.Dispose() 
    比如这一段,
    HScrollBar1.Value范围是:1~20
    Label1的宽高分别是:1200px,760px
    主窗体.arr5():是引用窗体名为“主窗体”的一个数组,定义的时候是这样的arr5(169, 169) As Byte
    colory()和colorx()都是颜色,一维的170个成员
    主窗体.cz和主窗体.hz是一维的170个成员
    以上arr5、colory()、cz等都是变化的,不一定用数组里面的全部,可能arr5用的只有(32,32)


    然后这里两条formGraphics.DrawLine的效果是绘制小正方形,以前是用
    New System.Drawing.SolidBrush(System.Drawing.Color.White)
    然后用formGraphics.FillRectangle,就是直接填充矩形的方式绘制的,
    但后来老师说要每个颜色都要能变的,
    而System.Drawing.SolidBrush定义了之后就不能改变颜色了,所以只能换成pen就是花粗线条(看起来像矩形),
    myPen.Color =是可以的改颜色的


    最后当HScrollBar1.Value>6时,都能很快绘制完成,<6后,花了几秒就停下了,无响应一会儿,窗体白屏。
    我个人感觉这个无响应是和时间有关的,好像是5秒左右就默认无响应一样,请问大家,有没有解决的方法

    2009年3月8日 2:51

答案