C # - Как я могу узнать, почему происходит ArgumentException? - PullRequest
7 голосов
/ 16 ноября 2011

Произошло необработанное исключение типа 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.. В соответствии с приведенным ниже советом, я начну с рассмотрения процедур рисования, которые я модифицировала.

Далее Редактировать: Я нашел это. 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. Возврат этой функции убрал сбои. К сожалению, похоже, что я вернулся к поиску утечки памяти, которую я искал, когда вносил эти изменения ...

1 Ответ

9 голосов
/ 16 ноября 2011

Использование Разрыв по исключениям в Visual Studio.Меню: Debug-> Exceptions и нажмите «брошено» на исключение, которое вы хотите найти.

Да, и не забудьте отладить компиляцию и запустить с отладчиком;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...