1

我正在使用 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 图形内容正在泄漏或未被清理

4

1 回答 1

0

感谢 HighCores 的评论,我现在正在调度线程上创建文本框,一切正常。对于那些感兴趣的人,这里有一个存储库,它使用 WPF 文本框以这种方式进行拼写检查。

于 2013-08-01T00:48:14.233 回答