C # - Как узнать, почему возникает исключение ArgumentException?

Необработанное исключение типа 'System.ArgumentException' произошло в System.Drawing.dll

Дополнительная информация: Параметр недействителен.

Это происходит в конце этого кода.

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);
}

, когда я агрессивно удалял ссылки на объекты Drawing, у которых не было Dispose. Отмена этой функции устранила сбои.К сожалению, похоже, я вернулся к отслеживанию утечки памяти, которую искал, когда вносил эти изменения ...

7
задан Sean Duggan 15 November 2011 в 23:56
поделиться