请查看下面描述的方法
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对象或者这样的对象,所以我真的不知道发生了什么。
答案 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;
}