TextBox
Web アプリケーションでサーバー側のスペル チェックを実行するために WPF を使用しています。IIS でホストされている Web アプリに PresentationFramework を追加するのが悪いことであることはわかっていますが、とにかく実行しました。今、私はその代償を払っています。
私はこのようなことをしています:
var spellCheckTextBox = new TextBox {
Text = text
};
int errorIndex = spellCheckTextBox.GetNextSpellingErrorCharacterIndex(startPosition, LogicalDirection.Forward);
これを行うには、この記事で概説しているように、STA でメソッドを呼び出す必要があります。
例外が発生しましたWin32Exception: The operation completed successfully
。これは、プロセスが割り当てることができるハンドルの最大数を超えたためだと思います。テキスト ボックスを割り当てているメソッドは正常に終了しますが、基になる Win32 グラフィック コンテキストがクリーンアップされていないように感じます。TextBox は IDisposable を実装していません。使用したリソースを確実にクリーンアップするにはどうすればよいですか?
ページがダウンしたときに xaml ページ上にあった場合、Presentation Framework の内部がそのクリーンアップを行う可能性がありますが、それが行われていない場所であると考えています。
興味のある方は、スタック トレースをご覧ください。
[Win32Exception: The operation completed successfully]
MS.Win32.UnsafeNativeMethods.RegisterClassEx(WNDCLASSEX_D wc_d):15
MS.Win32.HwndWrapper..ctor(Int32 classStyle, Int32 style, Int32 exStyle, Int32 x, Int32 y, Int32 width, Int32 height, String name, IntPtr parent, HwndWrapperHook[] hooks):479
System.Windows.Threading.Dispatcher..ctor():136
System.Windows.Threading.Dispatcher.get_CurrentDispatcher():14
System.Windows.DependencyObject..ctor():0
System.Windows.Media.Visual..ctor(ResourceType resourceType):11
System.Windows.UIElement..ctor():0
System.Windows.FrameworkElement..ctor():11
System.Windows.Controls.Control..ctor():0
System.Windows.Controls.Primitives.TextBoxBase..ctor():0
System.Windows.Controls.TextBox..ctor():11
私はここで同様の問題を抱えている他の人を見つけました. ほとんどの場合、Win32 グラフィックスがリークしているか、クリーンアップされていないようです。