none
WPF RichTextBox 用微软中文输入发输入中文时会随机出现Crash RRS feed

  • 问题

  • System.InvalidOperationException: 无法在最佳段落格式化过程中重新输入文本格式化引擎。
       在 MS.Internal.TextFormatting.TextFormatterImp.AcquireContext(Object owner, IntPtr ploc)
       在 MS.Internal.TextFormatting.TextMetrics.FullTextLine.FormatLine(FullTextState fullText, Int32 cpFirst, Int32 lineLength, Int32 formatWidth, Int32 finiteFormatWidth, Int32 paragraphWidth, LineFlags lineFlags, FormattedTextSymbols collapsingSymbol)
       在 MS.Internal.TextFormatting.TextMetrics.FullTextLine..ctor(FormatSettings settings, Int32 cpFirst, Int32 lineLength, Int32 paragraphWidth, LineFlags lineFlags)
       在 MS.Internal.TextFormatting.TextFormatterImp.FormatLineInternal(TextSource textSource, Int32 firstCharIndex, Int32 lineLength, Double paragraphWidth, TextParagraphProperties paragraphProperties, TextLineBreak previousLineBreak, TextRunCache textRunCache)
       在 MS.Internal.TextFormatting.TextFormatterImp.FormatLine(TextSource textSource, Int32 firstCharIndex, Double paragraphWidth, TextParagraphProperties paragraphProperties, TextLineBreak previousLineBreak, TextRunCache textRunCache)
       在 MS.Internal.PtsHost.Line.Format(FormattingContext ctx, Int32 dcp, Int32 width, Int32 trackWidth, TextParagraphProperties lineProps, TextLineBreak textLineBreak)
       在 MS.Internal.PtsHost.TextParagraph.FormatLineCore(Line line, IntPtr pbrLineIn, FormattingContext ctx, Int32 dcp, Int32 width, Int32 trackWidth, Boolean firstLine, Int32 dcpLine)
       在 MS.Internal.PtsHost.TextParaClient.InputHitTestSimpleLines(FSPOINT pt, FSTEXTDETAILSFULL& textDetails)
       在 MS.Internal.PtsHost.TextParaClient.InputHitTest(FSPOINT pt)
       在 MS.Internal.PtsHost.PtsHelper.InputHitTestParaList(PtsContext ptsContext, FSPOINT pt, FSRECT& rcTrack, FSPARADESCRIPTION[] arrayParaDesc)
       在 MS.Internal.PtsHost.ContainerParaClient.InputHitTest(FSPOINT pt)
       在 MS.Internal.PtsHost.PtsHelper.InputHitTestParaList(PtsContext ptsContext, FSPOINT pt, FSRECT& rcTrack, FSPARADESCRIPTION[] arrayParaDesc)
       在 MS.Internal.PtsHost.PtsHelper.InputHitTestTrack(PtsContext ptsContext, FSPOINT pt, FSTRACKDESCRIPTION& trackDesc)
       在 MS.Internal.PtsHost.PtsPage.InputHitTestPage(FSPOINT pt)
       在 MS.Internal.PtsHost.FlowDocumentPage.InputHitTestCore(Point point)
       在 MS.Internal.PtsHost.FlowDocumentPage.System.Windows.IContentHost.InputHitTest(Point point)
       在 MS.Internal.PtsHost.PageVisual.System.Windows.IContentHost.InputHitTest(Point point)
       在 System.Windows.UIElement.InputHitTest(Point pt, IInputElement& enabledHit, IInputElement& rawHit, HitTestResult& rawHitResult)
       在 System.Windows.UIElement.InputHitTest(Point point)
       在 Microsoft.Windows.Shell.WindowChromeWorker._HandleNCHitTest(WM uMsg, IntPtr wParam, IntPtr lParam, Boolean& handled) 位置 E:\WishWell1.0\BlueOffice\BlueOfficePC\MahApps.Metro\Microsoft.Windows.Shell\WindowChromeWorker.cs:行号 702
       在 Microsoft.Windows.Shell.WindowChromeWorker._WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 位置 E:\WishWell1.0\BlueOffice\BlueOfficePC\MahApps.Metro\Microsoft.Windows.Shell\WindowChromeWorker.cs:行号 462
       在 System.Windows.Interop.HwndSource.PublicHooksFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       在 MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       在 MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
       在 System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
       在 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
       在 System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
       在 MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
    2018年7月30日 7:06

全部回复

  • Hi wolike,

    当我在Richtextbox控件中输入中文的时候没有出现任何的问题,你可以尝试着clean你的项目,然后再重新运行, 如果还是出现这样的问题的话, 加断点调试一下, 看在哪里会出现crash。

    Best Regards,

    Cherry


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2018年8月1日 4:44
    版主
  • 感谢你能回答我的问题,

    但是出现问题时,异常没有出现在项目中断点位置,直接在WindowChromeWorker文件中被拦截了;

    应该在750行;

    https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Shell/WindowChromeWorker.cs

    这个异常是快速输入时有概率发生,在视图上的表现是,在异常出现的瞬间,能看到光标位置没有在最后一个文字后边,而是挡住的最后一个文字;

    IInputElement inputElement = _window.InputHitTest(mousePosWindow);
    2018年8月1日 5:47
  • Hi wolike, 

    你可以重新新建一个项目, 然后添加Richtextbox到Winform中来测试一下是否还是会出现这个问题, 或者你可以上传你的项目到onedrive中, 我尝试着重现你的问题。

    Best Regards,

    Cherry


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2018年8月2日 5:51
    版主
  • 项目不方便上传; 新建项目中确实没有复现这个问题;

    我根据log中的提示,找到了:

    https://referencesource.microsoft.com/#PresentationCore/Core/CSharp/MS/Internal/TextFormatting/TextFormatterImp.cs,edc037e3338c34f2

    这个链接下TextFormatterImp类中第 603 行有直接抛出异常的代码。我认为我的遇到的问题就是这里抛出了;

    2018年8月2日 8:54