【发布时间】:2016-10-14 09:34:00
【问题描述】:
当调用 OnTextChanged 事件时,我正在使用 Xamarin Forms 的 Entry 检索一些数据。
有时,它会抛出无法捕获的Java.Lang.ArrayIndexOutOfBoundsException,从而导致应用程序崩溃。
我使用的代码是:
private void textbox_OnTextChanged(object sender, TextChangedEventArgs e)
{
TextChanged();
}
public async void TextChanged()
{
try
{
if(textbox.Text.Length > 5) //< This sucks and I know it.
{
string text = textbox.Text;
await Task.Run(()=>doSomeMadlyDemandingRandomStuff(text));
}
}
catch(Exception ex)
{
//Bloody exception is never caught.
}
}
我知道TextChanged() 的条件距离执行性能还有光年,但在这一点上,我只想让它工作。
当用户输入相当长的句子或退格几次时,会引发上述异常。
整个例外是Java.Lang.ArrayIndexOutOfBoundsException: length=20; index=20。
备注
1) 我尝试运行Environment.StackTrace,但它冻结了,我只是不知道它被扔到了哪里。对此的任何帮助将不胜感激。
2) 当总长度大于 20 个字符并且 awaited 方法直接接收到 Text 属性时,它曾经抛出这个异常,我怀疑它与正在运行的线程中的值一起损坏。传递一个变量 (text) 解决了 that 问题。
3) 我知道Java.Lang.ArrayIndexOutOfBoundsException 是什么意思。我只是不知道何时它正在访问超出范围的索引。
4) Xamarin Forms 的Editor 有同样的问题。
5) 一些上下文来澄清这个文本框应该做什么:它应该作为一个自动完成(能够)条目,用户输入几个字母,列表视图填充结果,并不断更新为剩下的字母被输入。
【问题讨论】:
-
尝试捕获(异常){ }
-
有趣的是,如果没有提供变量,它会捕获异常,但遗憾的是我不能忽略这个问题。
-
检查 doSomeMadlyDemandingRandomStuff 的实现。
-
它使用提供的字符串通过
DependencyService将其发送到基于Android 的组件。应该不是问题。 -
没关系。捕获没有变量的异常根本没有捕获它。
标签: c# android xamarin.forms