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

本文关键字:ArgumentException 何找 C#- | 更新日期: 2023-09-27 18:14:50

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.根据下面的建议,我将从查看我修改的绘制程序开始。

进一步编辑:我找到了。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的图形对象的引用时。恢复该功能消除了崩溃。不幸的是,当我做出这些更改时,我似乎又回到了寻找内存泄漏的位置。。。

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

在Visual Studio中对异常使用中断。菜单:Debug->Exceptions,然后单击要查找的异常上的"抛出"。

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