【发布时间】:2019-09-06 11:02:59
【问题描述】:
我在使用 Xamarin 为 Zebra TC72 条形码阅读器 (Android 8.1 API 27) 编写的应用程序时遇到问题 每次读取条码时,我都会在 EditText 中写入条码并更新 ListView。我看到在扫描 150-400 个条形码后通常发生在 SetText 行中,这给了我以下异常:
错误:Eccezione non gestita System.Exception:CurrentDomainOnUnhandledException ---> Java.Lang.RuntimeException:无法从包裹中读取输入通道文件描述符。 在 Java.Interop.JniEnvironment+InstanceMethods.CallVoidMethod(Java.Interop.JniObjectReference 实例,Java.Interop.JniMethodInfo 方法,Java.Interop.JniArgumentValue* args)[0x00069] 在:0 在 Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* 参数) [0x0002a] in :0 在 Android.Widget.TextView.SetText (Java.Lang.ICharSequence 文本,Android.Widget.TextView+BufferType 类型) [0x0004b] in :0 在 Android.Widget.TextView.SetText (System.String text, Android.Widget.TextView+BufferType 类型) [0x0000d] in :0 在 Droid.ScannerActivity_V1+c__DisplayClass23_0.b__0 () [0x00016] 在 :0 在 :0 中的 Java.Lang.Thread+RunnableImplementor.Run () [0x00008] 在 :0 中的 Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00009] 在(包装动态方法)System.Object.6(intptr,intptr) --- 内部异常堆栈跟踪结束 ---
我从分析器中看到的是大量线程。 (我不明白是否应该使用 runOnUiThread 一遍又一遍地调用同一个线程,或者是否每次都调用一个新线程)。 Ater 大量成功调用下一个 RunOnUiThread 无法在 editText 中设置文本,我的应用程序进入 Show(exc),它也使用 RunOnUiThread 显示异常消息的 Toast。 RunOnUiThread 的第二次调用也会导致应用程序完全崩溃
public void Write_returned_BC(EditText v)
{
try
{
if (Scanned_Data != null) //Scanned_Data is my Barcode
{
RunOnUiThread(() => v.SetText(Scanned_Data,TextView.BufferType.Normal));
}
}
catch (Exception exc)
{
Show(exc);
}
}
【问题讨论】:
标签: c# xamarin.android