7

System.Drawing.dll 中出现“System.ArgumentException”类型的未处理异常

附加信息:参数无效。

这发生在此代码的末尾。

public void WriteStatusMessage(string message)
{
    m_ToolStripStatusLabelUserMessage.BackColor = WriteDefaultBackColor;
    m_ToolStripStatusLabelUserMessage.ForeColor = WriteDefaultForeColor;
    m_ToolStripStatusLabelUserMessage.Text = CommonConstants.Space + message;
    Update();
}

如果我在代码中添加断点,它会出现该错误,但会在以后的更新中发生。据我所知,我们正在做的唯一图形代码涉及绘制图形(这与我通过尝试打开历史观察变量值文件然后显示为图形时得到此错误的方式一致),并且仅使用画笔、钢笔和字体(我最近的部分更改是通过并添加“使用”以确保它们被处理掉,因为我们遇到了内存泄漏)。

主要是,我希望有人能指出我正确的方向来开始解码。令我沮丧的是,这是进行大量更改并签入的情况之一,我可以发誓我在签入之前已对其进行了检查,特别是因为此操作与我正在解决的问题有关,但很难与事实争论,事实是它现在正在失败。

感谢您提供的任何帮助。

编辑:我已经设法在我的一次签到中恢复到早期版本,所以我对在哪里寻找问题有了一个大致的了解。它确实是图形库之一,特别是绘制图形的图形库,它是对http://www.codeproject.com/KB/miscctrl/GraphComponents.aspx库的修改。根据下面的建议,我将从查看我修改的 Paint 程序开始。

进一步编辑:我找到了。OnPaint,正如预测的那样:

protected override void OnPaint(PaintEventArgs e)
{
    if (!Visible)
        return;

    Graphics graphics = e.Graphics;
    Draw(graphics);

    base.OnPaint(e);
}

变成了

protected override void OnPaint(PaintEventArgs e)
{
    if (!Visible)
        return;

    using (Graphics graphics = e.Graphics)
    {
        Draw(graphics);
    }       
    base.OnPaint(e);
}

当我积极删除对没有 Dispose 的绘图对象的引用时。恢复该功能消除了崩溃。不幸的是,当我进行这些更改时,我似乎又开始追踪我正在寻找的内存泄漏......

4

1 回答 1

9

在 Visual Studio 中对异常使用Break 。菜单:Debug->Exceptions并在您希望查找的异常上单击“抛出”。

哦,别忘了调试编译并使用调试器运行;)

于 2011-11-15T22:31:25.770 回答