1

同じサーバーで 2 つの別個の C# ASP.NET プログラムを実行しています。それらのそれぞれは、それぞれのビジネス レイヤー dll の Richtextbox コントロールを使用して、データベースに保存されているテキストから RTF 形式を取り除きます。

var rtf = new RichTextBox {Rtf = itemWeb.RTF_DESCRIPTION};
                    item.WebDescription = rtf.Text;

問題は、両方のプログラムを実行すると、この行が(両方のプログラムで)次のエラーで失敗することがよくあることです。

[Win32Exception (0x80004005): Error creating window handle.]

これらのプログラムは、コードや dll を一切共有しません。唯一の共通点は、フォーマットを削除するために使用される手法と、それらが同じサーバー上にあるという事実です。

この方法で Richtextbox を使用する既知の問題はありますか? 私はコードを書きませんでしたが、書式設定を削除する方法を検索するときにこれが一般的な解決策であるにもかかわらず、dll で UI 要素を使用することは標準的ではないようです。

理想的には、Richtextbox を使用せずに解決策を見つけることができます。近い正規表現を使用しているものを見つけましたが、フォーマットの 100% が削除されることを保証するものではありません。なぜこれが起こっているのか、または回避策についての説明をいただければ幸いです。

ありがとう!

4

1 に答える 1

5

最近、RTF からテキストに変換する静的クラスのメソッドで同じエラーが発生し始めました。

RichTextBox がメソッド内にあった (グローバルではない) コンテキストであっても、RichTextBox が適切に破棄されていない (または、十分に迅速に) 追跡しました。

コードがあまり実行されない場合、これは同じ問題ではない可能性があります。

30,000回以上の変換を実行するテストケアをコーディングすることで再現できます。using 句を実装すると、問題が解決しました。

using (System.Windows.Forms.RichTextBox rtBox = new System.Windows.Forms.RichTextBox())
{
    rtBox.Rtf = str;
    str = rtBox.Text; // convert the RTF to plain text.
}

これはうまくいきましたが、かなり遅いです。コントロールを作成せずにこれを行うことができればよいのですが、それはMicrosoft の RTF 変換に関する公式のアドバイスです

于 2012-04-12T23:44:50.907 に答える