我正在使用 WPFTextBox
在 Web 应用程序中执行服务器端拼写检查。我知道将 PresentationFramework 添加到托管在 IIS 中的 Web 应用程序是一件很糟糕的事情,但我还是这样做了。现在我正在付出代价。
我正在做这样的事情:
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 图形内容正在泄漏或未被清理。