WinForms RichTextBox中的OutOfMemory异常

时间:2012-09-24 20:03:12

标签: c# winforms richtextbox out-of-memory

我在少数方法中使用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或者说正确的方式?

1 个答案:

答案 0 :(得分:4)

从调试器中可以看出,获取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”存储在静态变量中,这样您只能使用一个实例。