【发布时间】:2018-07-12 00:36:12
【问题描述】:
我在网上找错误,发现我的错误可能是因为我有一个方法是在数据链接中发送更改而不发送用户界面线程,我发现我可以通过以下方式解决这个问题Device.BeginInvokeOnMainThread / UI线程的实现。但我不完全知道如何在我的项目中或在任何情况下在我正在研究的方法中实现它。
这是我收到的错误
没有原生 Android 堆栈跟踪(请参阅调试器输出)。
在执行本机代码时获得了 SIGSEGV。这通常表示 07-10 16:38:07.878 E/mono-rt (1929):mono 运行时中的致命错误或本机库之一 07-10 16:38:07.878 E/mono-rt (1929):由您的应用程序使用。
致命信号 11 (SIGSEGV),代码 1,故障地址 0x69432220 in tid 1959(Finalizer)
public void CheckCitas()
{
Debug.WriteLine("-------------------------------------Eventos checados------------------------------------");
// Handle when your app sleeps
List<Cita> citas = memberDatabase.GetCitasL();
int citCount = citas.Count();
if (citCount > 0)
{
foreach (Cita ct in citas)
{
var dt = ct.fecha;
var ft = ct.hora;
var idx = ct.ID;
var razon = ct.razon;
var desc = ct.descripcion;
// string ft_f = TimeSpan.Parse(ft).ToString();
if (ft == "11:0")
{
ft = ft + "0";
}
ft = ft.Replace(" ",string.Empty);
int ft_len = ft.Length;
switch (ft_len)
{
case (5):
if (DateTime.TryParseExact(dt, "yyyy-MM-dd", null, DateTimeStyles.AssumeLocal, out DateTime datetime_))
{
dt = datetime_.ToString("dd-MM-yyyy"); //hay que probar este y el de 4
}
var chckdrx = dt + " " + ft;
DateTime dtchckx = DateTime.ParseExact(chckdrx.Trim(), "dd-MM-yyyy HH:mm",
System.Globalization.CultureInfo.InvariantCulture);
DateTime nowx = DateTime.Now;
var result_tx = DateTime.Compare(dtchckx, nowx);
var tm10x = dtchckx - nowx;
var tmm = tm10x.Minutes;
if (tmm < 0)
{
var ctExp = new CitaExp();
ctExp.descripcion = desc;
ctExp.fecha = dt;
ctExp.hora = ft;
ctExp.ID = idx;
ctExp.razon = razon;
//memberDatabase.AddCitaExp(ctExp);
memberDatabase.DeleteCita(idx);
Debug.WriteLine("---------------------------------------Alarma eliminada -------------------------------------");
}
if (tmm <= 5)
{
var v = CrossVibrate.Current;
v.Vibration(TimeSpan.FromSeconds(3));
CrossLocalNotifications.Current.Show("Faltan " + tmm + " minutos para tu cita " + ct.razon, "");
}
if (tmm == 0)
{
//var ctI = new CitaInfo(idx);
//ctI.RingAlarm();
var v = CrossVibrate.Current;
v.Vibration(TimeSpan.FromSeconds(12));
Debug.WriteLine("-----------------------------------------------Alarma Sonando-------------------------------------");
CrossLocalNotifications.Current.Show("Tú cita " + razon + " es ahora !!!", "Entiendo");
//DependencyService.Get<IAudio>().PlayAudioFile("softAlarm.mp3");
var assembly = typeof(App).GetTypeInfo().Assembly;
Stream audioFile = assembly.GetManifestResourceStream("DateEventos.Reso.softAlarm.mp3");
var audio = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current;
audio.Load(audioFile);
audio.Play();
//try
//{
Debug.WriteLine("-----------------------------------------------Expirando cita-------------------------------------");
var ctExp = new CitaExp();
ctExp.descripcion = desc;
ctExp.fecha = dt;
ctExp.hora = ft;
ctExp.ID = idx;
ctExp.razon = razon;
Expirando(idx.ToString());
memberDatabase.AddCitaExp(ctExp);
memberDatabase.DeleteCita(idx);
// }
//catch (Exception ex)
//{
// Debug.WriteLine("--------------------------Error_" + ex.ToString() + "-------------------------------------");
// throw;
//}
}
break;
case (3):
string outputdt = ft.Substring(ft.Length - 1, 1);
if (outputdt == "0")
{
ft = ft + "0";
}
if (DateTime.TryParseExact(dt, "yyyy-MM-dd", null, DateTimeStyles.AssumeLocal, out DateTime datetime))
{
dt = datetime.ToString("dd-MM-yyyy");
}
var chckdr = dt + " " + ft;
DateTime dtchck = DateTime.ParseExact(chckdr.Trim(), "dd-MM-yyyy H:mm",
System.Globalization.CultureInfo.InvariantCulture);
DateTime now = DateTime.Now;
var result_t = DateTime.Compare(dtchck, now);
var tm10 = dtchck - now;
var tmmi = tm10.Minutes;
if (tmmi < 0)
{
var ctExp = new CitaExp();
ctExp.descripcion = desc;
ctExp.fecha = dt;
ctExp.hora = ft;
ctExp.ID = idx;
ctExp.razon = razon;
//memberDatabase.AddCitaExp(ctExp);
memberDatabase.DeleteCita(idx);
Debug.WriteLine("---------------------------------------Alarma eliminada -------------------------------------");
}
if (tmmi <= 5)
{
var v = CrossVibrate.Current;
v.Vibration(TimeSpan.FromSeconds(3));
CrossLocalNotifications.Current.Show("Faltan " + tmmi + " minutos para tu cita " + ct.razon, "");
}
if (tmmi == 0)
{
var v = CrossVibrate.Current;
v.Vibration(TimeSpan.FromSeconds(12));
Debug.WriteLine("-----------------------------------------------Alarma Sonando-------------------------------------");
CrossLocalNotifications.Current.Show("Tú cita " + razon + " es ahora !!!", "Entiendo");
//DependencyService.Get<IAudio>().PlayAudioFile("softAlarm.mp3");
var assembly = typeof(App).GetTypeInfo().Assembly;
Stream audioFile = assembly.GetManifestResourceStream("DateEventos.Reso.softAlarm.mp3");
var audio = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current;
audio.Load(audioFile);
audio.Play();
var ctExp = new CitaExp();
ctExp.descripcion = desc;
ctExp.fecha = dt;
ctExp.hora = ft;
ctExp.ID = idx;
ctExp.razon = razon;
Expirando(idx.ToString());
memberDatabase.AddCitaExp(ctExp);
memberDatabase.DeleteCita(idx);
}
break;
case (4):
//string outputdtx = ft.Substring(ft.Length - 1, 1);
//if (outputdtx == "0")
//{
// ft = ft + "0";
//}
if (DateTime.TryParseExact(dt, "yyyy-MM-dd", null, DateTimeStyles.AssumeLocal, out DateTime datetimex))
{
dt = datetimex.ToString("dd-MM-yyyy");
}
var chckdrxx = dt + " " + ft;
DateTime dtchckxx = DateTime.ParseExact(chckdrxx.Trim(), "dd-MM-yyyy H:mm",
System.Globalization.CultureInfo.InvariantCulture);
DateTime nowxx = DateTime.Now;
var result_txx = DateTime.Compare(dtchckxx, nowxx);
var tm10xx = dtchckxx - nowxx;
var tmmix = tm10xx.Minutes;
if (tmmix < 0)
{
var ctExp = new CitaExp();
ctExp.descripcion = desc;
ctExp.fecha = dt;
ctExp.hora = ft;
ctExp.ID = idx;
ctExp.razon = razon;
//memberDatabase.AddCitaExp(ctExp);
memberDatabase.DeleteCita(idx);
Debug.WriteLine("---------------------------------------Alarma eliminada -------------------------------------");
}
if (tmmix <= 5)
{
var v = CrossVibrate.Current;
v.Vibration(TimeSpan.FromSeconds(3));
CrossLocalNotifications.Current.Show("Faltan " + tmmix + " minutos para tu cita " + ct.razon, "");
}
if (tmmix == 0)
{
var v = CrossVibrate.Current;
v.Vibration(TimeSpan.FromSeconds(12));
Debug.WriteLine("-----------------------------------------------Alarma Sonando-------------------------------------");
CrossLocalNotifications.Current.Show("Tú cita " + razon + " es ahora !!!", "Entiendo");
//DependencyService.Get<IAudio>().PlayAudioFile("softAlarm.mp3");
var assembly = typeof(App).GetTypeInfo().Assembly;
Stream audioFile = assembly.GetManifestResourceStream("DateEventos.Reso.softAlarm.mp3");
var audio = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current;
audio.Load(audioFile);
audio.Play();
Debug.WriteLine("-----------------------------------------------Expirando cita-------------------------------------");
var ctExp = new CitaExp();
ctExp.descripcion = desc;
ctExp.fecha = dt;
ctExp.hora = ft;
ctExp.ID = idx;
ctExp.razon = razon;
memberDatabase.AddCitaExp(ctExp);
Expirando(idx.ToString());
memberDatabase.DeleteCita(idx);
}
break;
}
}
}
}
我想知道如何处理此类问题或如何为方法实现 Device.BeginInvokeOnMainThread,我没有上传完整的控制台错误,因为它很长。谢谢大家。
【问题讨论】:
标签: c# multithreading xamarin xamarin.forms