0

RichTextBoxフォント、色の変更、画像のRtf形式への変換など、いくつかの方法でインスタンスを使用しています。

public static string ColorText(string text)
{
    System.Windows.Forms.RichTextBox rtb = new System.Windows.Forms.RichTextBox();

    rtb.Text = conversation;

    // find predefined keywords in text, select them and color them

    return rtb.Rtf;
}

しばらくすると、OutOfMemory例外が発生します。電話する必要がありますrtb.Dispose();か?またはGC.Collectまたは使用するusingまたは正しい方法は何ですか?

4

1 に答える 1

5

デバッガーから、Rtfプロパティ値を取得した後、rtb.IsHandleCreatedプロパティがtrueになることがわかります。これは問題です。ウィンドウハンドルはラッパーコントロールを存続させます。ハンドルを破棄するには、コントロールを再度破棄する必要があります。

public static string ColorText(string text) {
    using (var rtb = new System.Windows.Forms.RichTextBox()) {
        rtb.Text = text;
        return rtb.Rtf;
    }
}

または、「rtb」を静的変数に格納して、1つのインスタンスのみを使用するようにします。

于 2012-09-24T22:30:10.717 に答える