Xamarin Forms Entry抛出Java.Lang.ArrayIndexOutOfBoundsExceptio
本文关键字:Lang ArrayIndexOutOfBoundsExceptio Java 抛出 Forms Entry Xamarin | 更新日期: 2023-09-27 18:13:06
我使用Xamarin Forms' Entry
检索一些数据时,OnTextChanged
事件被调用。
有时,它会抛出一个不可捕获的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个字符并且 await
ed方法直接接收Text
属性时,它曾经抛出这个异常,我怀疑,这与正在运行的线程的值相混淆。传递一个变量(text
)解决了那个问题。
3)我知道Java.Lang.ArrayIndexOutOfBoundsException
的意思。我只是不知道何时正在访问超出边界的索引。
4) Xamarin Forms的Editor
也有同样的问题。
5)一些上下文来说明这个文本框应该做什么:它应该作为一个自动完成(可完成)的条目,其中用户输入几个字母,一个listview填充结果,并在输入剩余字母时不断更新。
我看到doSomeMadlyDemandingRandomStuff
的潜在问题…如果这将花费一段时间,那么在处理第一个文本更改事件之前,如何阻止用户再次更改文本并因此再次调用处理程序?作为测试,你可能想暂时禁用文本框,直到"MadlyDemandingRandomStuff"完成,看看这个处理程序是否在第一个处理程序完成之前被再次调用可能是问题的直接原因,例如:
public async void TextChanged()
{
textbox.IsEnabled = false;
try
{
if(textbox.Text.Length > 5) //< This sucks and I know it.
{
string text = textbox.Text;
await Task.Run(()=>doSomeMadlyDemandingRandomStuff(text));
textbox.IsEnabled = true;
}
}
catch(Exception ex)
{
//Bloody exception is never caught.
}
}
我知道这可能不是一个"答案",但它可能有助于找到问题,所以发布它。
如果这是一个本机异常,有时本机异常会导致应用程序在任何异常被发送回托管端之前崩溃,因此你的catch块永远不会捕获它。