【问题标题】:Crash after fast typing in TextChanging event快速输入 TextChanging 事件后崩溃
【发布时间】:2016-09-19 18:04:42
【问题描述】:

试试这个:

<TextBox TextChanging="TextBox_OnTextChanging"></TextBox>

private void TextBox_OnTextChanging(TextBox sender, TextBoxTextChangingEventArgs args)
{
    sender.Text = "some string"; // It does not matter about string
}

如果您尝试在 TextChanging 事件之后更改文本,它将冻结或 crash 在文本框中快速输入(我的意思是用所有手指按随机键)。

TextBox_OnTextChanged 事件没问题。

(这个问题是从哪里来的?我正在尝试基于this post创建NumericTextBox,这个Q是核心问题。)

编辑:崩溃是这个未处理的异常:

【问题讨论】:

  • 当您说“崩溃”时,请详细描述您的意思。
  • 在我看来,该代码会抛出 StackOverflowException,因为每当文本即将更改时,您都会再次设置文本。
  • @Visual Vincent 不是这样的。如果慢慢按,那就没问题了。在 OnTextChanging 方法中更改文本不会再次调用事件。
  • @hatchet : 由截图更新
  • @Alamakanambra - 告诉你有一个异常,但它没有告诉你异常是什么。这就是我们需要看到的信息。

标签: c# xaml win-universal-app


【解决方案1】:

我同意@Visual Vincent 的观点,TextChanging 事件发生在Text 属性已经反映了新值,但仍未在 UI 中呈现时。当您快速键入时,可能会导致可能导致崩溃的致命错误。在我这边它冻结了,但调试器没有崩溃。

它没有告诉我异常是什么——这就是问题所在。那一行代码应该不是问题。

您的 VS 可能配置为仅调试托管异常。如果你得到一个本机异常,这可能会出现。您可以在项目的属性中找到Debug 选项并将Debugger typeManaged only 更改为Mixed(Managed and Native)

而且我想你已经知道它为什么会崩溃,如何解决这个问题,也许你也想得到它崩溃时的信息而不显示错误信息,这个问题,你可以参考How to debug a program when it crashes w/out exception?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多