C# - 如何找到ArgumentException发生的原因?

时间:2011-11-15 22:27:26

标签: c# system.drawing argumentexception

  

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的Drawing对象的引用时。恢复该功能可以消除崩溃。不幸的是,当我做出这些改变时,看起来我回过头来追踪我正在寻找的内存泄漏......

1 个答案:

答案 0 :(得分:9)

在Visual Studio中使用中断异常。 菜单: Debug-> Exceptions ,然后点击您要查找的例外情况“抛出”。

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