静态方法上下文中的RichTextBox生存期

时间:2011-10-07 12:55:36

标签: c# richtextbox

请查看下面描述的方法

        public static string RemoveRTF(string input)
        {
            string output = input;

            RichTextBox RichTextBox1 = new RichTextBox();
            try {
                RichTextBox1.Rtf = input;
                output = RichTextBox1.Text;
            } catch (ArgumentException argExp) { 
                /*
                 * The supplied input value is not in RTF format. 
                 * Ignore.
                 */
            }
            return output;
        }

我的问题是,多次调用上面的代码会产生大量的USER对象,句柄还是GDI对象。

问的原因是我有一些代码在某天完美运行,然后第二天没有任何代码更改停止使用报告的错误: 创建窗口句柄时出错..

唯一的问题是我似乎无法看到问题的原因,除了callstack告诉我错误源自上面的代码。

TaskManager不会显示大量的USER对象或者这样的对象,所以我真的不知道发生了什么。

4 个答案:

答案 0 :(得分:3)

您应该释放RichTextBox以释放任何非托管资源。

RichTextBox1.Dispose();

答案 1 :(得分:1)

或者您可以创建一个全局RichTextBox并使用它。

    RichTextBox RichTextBox1 = new RichTextBox();
    public static string RemoveRTF(string input)
            {

    string output = input;

    try {
                    RichTextBox1.Rtf = input;
                    output = RichTextBox1.Text;
RichTextBox1.rtf = null;
                } catch (ArgumentException argExp) { 
                    /*
                     * The supplied input value is not in RTF format. 
                     * Ignore.
                     */
                }
                return output;
            }

或使用using()

答案 2 :(得分:0)

RichTextBox对象仅适用于UI线程。从后台线程调用此代码将抛出一个Exception,其中包含“Error creating Window Handle ..”这样的消息。

答案 3 :(得分:0)

我也收到了同样的错误,面对“创建窗口句柄时出错”。出现此问题是因为即使我们创建RichTextBox的对象并在方法结束时将该对象设置为null,它也不会被处理掉,所以最初它工作正常,然后它开始给出“创建窗口句柄的错误”。所以改为使用“使用”。它将在“使用”上下文之外部署richTextBox的对象。这将解决该错误。

private String RemoveRtf(String RtfScript)         {             string PlainText = null;

        try
        {
            if (!String.IsNullOrEmpty(RtfScript))
            {

                using (RichTextBox richTxtBox = new RichTextBox())
                {


                    richTxtBox.Rtf = RtfScript;

                    PlainText = richTxtBox.Text;
                }
            }
        }
        catch (Exception ex)
        {
            // log error here
        }
        finally
        {
            RtfScript = null;

        }
        return PlainText;
    }