2012-03-26 20 views
1

Ich habe zwei separate C# ASP.NET-Programme, die auf demselben Server ausgeführt werden. Jeder von ihnen verwendet das Richtextbox-Steuerelement in den entsprechenden Business-Layer-DLLs, um die RTF-Formatierung aus dem in der Datenbank gespeicherten Text zu entfernen.Stripping RTF Formatierung von Text verursacht Handle Fehler mit Richtextbox

Das Problem ist, wenn beide Programme ausgeführt werden, passiert oft, wo diese Zeile (in beiden Programmen) mit dem folgenden Fehler fehlschlägt.

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

Diese Programme geben keinen Code oder DLL zu löschen. Das einzige, was gemeinsam ist, ist die Technik, mit der die Formatierung und die Tatsache, dass sie sich auf demselben Server befinden, entfernt werden.

Gibt es ein bekanntes Problem mit der Richtextbox auf diese Weise? Ich habe den Code nicht geschrieben, aber es scheint nicht Standard zu sein, ein UI-Element in einer DLL zu verwenden, obwohl dies die gängige Lösung ist, wenn man nach dem Entfernen von Formatierungen sucht.

Im Idealfall würde ich eine Lösung ohne die Verwendung der Richtextbox finden. Ich habe einen gefunden, der den Regex verwendet, der sich nähert, aber nicht garantiert, dass 100% der Formatierung entfernt wird. Irgendwelche Erklärungen, warum dies geschieht oder irgendwelche Workarounds werden geschätzt.

Danke!

Antwort

4

Ich habe vor kurzem den gleichen Fehler mit einer Methode in einer statischen Klasse, die von RTF in Text konvertiert, erhalten.

Ich fand es auf die RichTextBox nicht richtig (oder möglicherweise schnell genug) entfernt, obwohl der Kontext der RichTextBox in der Methode war (nicht global).

Wenn Ihr Code nicht oft ausgeführt wird, ist dies möglicherweise nicht das gleiche Problem.

Es kann reproduziert werden, indem eine Testpflege codiert, die die Umwandlung 30.000+ Male durchlaufen. Das Implementieren einer using-Klausel löste das Problem.

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

Das funktionierte, aber es ist ziemlich langsam. Es wäre schön, wenn Sie dies tun könnten, ohne ein Steuerelement erstellen zu müssen, aber das ist Microsoft's official advice for RTF conversion.