Я использую таймер в моем приложении для Android (программирование на c#
), который редактирует текст TextView
каждый раз, когда срабатывает таймер, поэтому мне нужно использовать RunOnUiThread
.
TextView text;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
System.Timers.Timer _timer = new System.Timers.Timer();
text = FindViewById<TextView>(Resource.Id.textView4);
_timer.Interval = 100;
_timer.Elapsed += OnTimedEvent;
_timer.Enabled = true;
_timer.Start();
}
private void OnTimedEvent(object sender, ElapsedEventArgs e)
{
try
{
this.RunOnUiThread(() =>
{
text.Text += "bm";
});
}
catch (Exception ex)
{
Toast.MakeText(this, ex.ToString(), ToastLength.Short).Show();
}
}
При каждом первом запуске моего приложения, когда вызывается метод OnTimedEvent
, генерируется незапланированное исключение без каких-либо подробностей, а сообщение Toast
не отображается, что означает, что catch
не вызывается.Но во втором запуске все в порядке и метод OnTimedEvent
вызывается нормально.Я попытался удалить RunOnUiThread
, и исключение не было выдано, но text.Text
не был обновлен.Почему это происходит?
Редактировать
Отслеживание стека:
12-25 17: 06: 20,847 W / GAv4 (13655):CampaignTrackingReceiver не зарегистрирован, не экспортирован или отключен.Кампания установки 12-25 17: 06: 20.987 W / System.err (13655): удалить не удалось: ENOENT (нет такого файла или каталога): /data/user/0/dabboussi.RandomG/shared_prefs/com.google.android.gms.analytics.prefs.xml.bak 12-25 17: 06: 21.342 D / SecWifiDisplayUtil (13655): значение метаданных: нет 12-25 17: 06: 21.352 D / ViewRootImpl (13655): # 1 mView = com.android.internal.policy.PhoneWindow $ DecorView {16fd198 IE ..... R ..... ID 0,0-0,0} 12-25 17: 06: 21.782 D / ViewRootImpl (13655): MSG_RESIZED_REPORT: ci =Rect (0, 96 - 0, 0) vi = Rect (0, 96 - 0, 0) или = 1 12-25 17: 06: 22.067 I / временная шкала (13655): временная шкала: идентификатор Activity_idle: android.os.BinderProxy@ 9d3df7b время: 234415682 12-25 17: 06: 27,567 D / ViewRootImpl (13655): ViewPostImeInputStage processPointer 0 12-25 17: 06: 27,657 D / ViewRootImpl (13655): ViewPostImeInputStage processPointer 1 12-25 17: 06: 06: 06: 27/ ViewRootImpl (13655): MSG_RESIZED: ci = Rect (0, 96 - 0, 0) vi = Rect (0, 96 - 0, 1012) или = 1 12-25 17: 06: 30.997 D / ViewRootImpl (13655):Ввод завершен в ImeInputStage.12-25 17: 06: 31.062 D / ViewRootImpl (13655): ввод завершен в ImeInputStage.12-25 17: 06: 31.102 D / ViewRootImpl (13655): MSG_RESIZED: ci = Rect (0, 96-0, 0) vi = Rect (0, 96-0, 0) или = 1 12-25 17:06: 32.482 D / ViewRootImpl (13655): ViewPostImeInputStage processPointer 0 12-25 17: 06: 32.567 D / ViewRootImpl (13655): ViewPostImeInputStage processPointer 1 Загруженная сборка: System.dll [внешняя] 12-25 17: 06: 32.642 I / временная шкала(13655): Временная шкала: Идентификатор Activity_launch_request: время dabboussi.RandomG: 234426256 Начало потока: # 2 12-25 17: 06: 33.082 D / SecWifiDisplayUtil (13655): Значение метаданных: нет 12-25 17: 06: 33.082 D / ViewRootImpl(13655): # 1 mView = com.android.internal.policy.PhoneWindow $ DecorView {e762cd IE ..... R ..... ID 0,0-0,0} Тема начата: # 3 Тема начата:# 4 Тема начата: # 5 Тема начата: # 6 Тема начата: # 7 12-25 17: 06: 33.142 D / ViewRootImpl (13655): MSG_RESIZED_REPORT: ci = Rect (0, 96 - 0, 0) vi = Rect (0, 96 - 0, 0) или = 1 Начало потока: # 8 Начало потока: # 9 Начало потока: # 10 Начало потока: # 11 Начало потока: # 12 Начало потока: # 13 Произошло необработанное исключение.