c# - System.Drawing.dll 中出现“System.ArgumentException”

标签 c# winforms

我有一个像“paint”这样的简单应用程序,我在设置为 pictureBox.Image 的位图中绘制。我可以在这里绘制多边形并将它们捕捉到顶点并移动,因此必须重新绘制位图。 有repaint方法。

private void DrawFullList()
    {
        if(pictureBox2.Image != null)
            pictureBox2.Image.Dispose();
        graphic = new Bitmap(pictureBox2.Width, pictureBox2.Height); // exception here
        g = Graphics.FromImage(graphic);
        pictureBox2.Image = graphic;
        for (int i = 0; i < PointsList.Count; i++)
        {
            bool yellowframe = false;
            if (i == dblclck)
                yellowframe = true;
            Draw(BrushList[i], PointsList[i], yellowframe);
        }
    }

因此,如果我捕捉到顶点并移动鼠标,DrawFullList() 函数将在 pictureBox_MouseMove(object sender, MouseEventArgs e) 函数中激活。当我移动一个顶点几秒钟(例如,制作圆圈)时,系统.Drawing.dll 中发生的异常 'System.ArgumentException' 被抛出。 这里有什么提示吗? :)

编辑: 有关异常的其他信息: 参数无效

最佳答案

您应该从 g - g.dispose() 释放内存。内存不足会导致此类异常,因为您的 bmp 可能对于实际可用内存来说太大了。

关于c# - System.Drawing.dll 中出现“System.ArgumentException”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36630669/

相关文章:

c# - 具有静态和动态内容的 WinForms UserControl 的最佳布局?

c# - 如何使用视觉样式绘制 3D 边框?

c# - 如何通过添加缩放按钮控制Windows窗体图表的放大和缩小

c# - 从 Usercontrol.ascx javascript 调用 Usercontrol.cs 中的 Webmethod

c# - 如何在另一个进程正在使用文件时复制文件

c# - C#占领随机整数

c# - 如果 bool 数组中的所有元素都为真?

c# - 什么时候应该关心在开始下一个方法之前完成一种方法?

vb.net - 标签位置应固定在右侧并向左增长

c# - WindowsFormsSynchronizationContext.Current.Post 在后台线程上执行 lambda