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

コードにブレークポイントを追加すると、そのエラーが発生しますが、後の更新で発生します。私が知る限り、私たちが行っている唯一のグラフィックス コードはグラフの描画を伴います (これは、過去のウォッチ変数値のファイルを開いてグラフとして表示しようとして、このエラーが発生する方法と一致します)。ブラシ、ペン、およびフォントを使用します (最近の変更の一部は、メモリ リークが発生していたため、確実に破棄されるように「使用」を追加していました)。

主に、誰かがこれを解読し始める正しい方向に私を向けることができることを願っています. 非常に残念なことに、これは多数の変更が行われてチェックインされたケースの 1 つであり、チェックインする前にチェックインしたことを誓うことができました。特に、このアクションは私が解決していた問題に関連しているためです。事実と議論してください、そして事実はそれが今失敗しているということです.

あなたが与えることができるどんな助けにも感謝します.

編集:チェックインの1つで以前のバージョンに戻すことができたので、どこで問題を探すべきかについての一般的な考えを持っています. これは確かにグラフィック ライブラリの 1 つであり、具体的には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 オブジェクトへの参照を積極的に削除していたとき。その機能を元に戻すと、クラッシュが解消されました。残念ながら、これらの変更を行ったときに探していたメモリ リークの追跡に戻ったようです...

4

1 に答える 1