Я делаю приложение для Android в xamarin с помощью C# и использую следующий код для повторения задачи, но, к сожалению, код не работает должным образом,
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Timer timer= new Timer();
SetContentView(Resource.Layout.Home);
timer.Enabled = true;
timer.Interval = 2000;
timer.Elapsed += Timer_Elapsed;
timer.Start();
}
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
Toast.MakeText(this, "asasasas", ToastLength.Long).Show();
}





У вас есть вызов пользовательского интерфейса в методе обратного вызова таймера asyncTimer_Elapsed
Все вызовы пользовательского интерфейса должны проходить через MainThread, иначе возникнет исключение потока.
Оберните Toast с помощью RunOnUiThread, как в примере ниже
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
RunOnUiThread(()=>Toast.MakeText(this, "asasasas", ToastLength.Long).Show();)
}
@CodeBank просто вызовы пользовательского интерфейса должны выполняться с помощью RunOnUiThread. Весь остальной код можно свободно размещать вне (или внутри) блока RunOnUiThread.
Большое спасибо @iamlcarus, еще один вопрос, если я хочу ввести какую-либо логику, я хочу вставить запись в db через пять секунд, мне все равно нужно использовать RunOnUiThread ??