c# - System.ObjectDisposedException:无法访问已处置的对象。- 如何检查应用程序是否在 Xamarin 中运行?
问题描述
我目前正在使用 Xamarin 和oxyplot创建一个应用程序。我的情节在主应用程序页面上可见,每当我关闭我的应用程序时,它都会崩溃并显示以下消息:
未处理的异常:
System.ObjectDisposedException:无法访问已处置的对象。对象名称:'OxyPlot.Xamarin.Android.PlotView'。
请注意,这是 oxyplot-xamarin 包中的一个已知错误。现在,我正在尝试解决这个问题,但到目前为止没有成功。我的代码的关键部分如下所示:
private void OnTimerElapsed(object state)
{
lock (Model.SyncRoot)
{
Update();
}
try {
Device.BeginInvokeOnMainThread(() => Model.InvalidatePlot(true)); // this line crashes the app
} catch {
}
}
我想在这个定期调用的函数中询问应用程序是否还活着或者它是否已经关闭。因此,解决方案必须看起来像这样:
private void OnTimerElapsed(object state)
{
lock (Model.SyncRoot)
{
Update();
}
try {
if (AppIsNotClosed)
{
Device.BeginInvokeOnMainThread(() => Model.InvalidatePlot(true)); // this line crashes the app
}
} catch {
}
}
任何想法如何检查 Xamarin 中应用程序的状态?非常感谢!
解决方案
感谢@SushiHangover 的评论,我现在想出了下面给出的解决方案。我的 App.xaml.cs 现在如下所示:
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace MyNamespace
{
public partial class App : Application
{
private static bool AppIsActive = false;
public App()
{
// InitializeComponent();
}
protected override void OnStart()
{
// Handle when your app starts
AppIsActive = true;
}
protected override void OnSleep()
{
// Handle when your app sleeps
AppIsActive = false;
}
protected override void OnResume()
{
// Handle when your app resumes
AppIsActive = true;
}
public static bool IsAppActive()
{
return AppIsActive;
}
}
}
然后,有问题的方法可以重写如下:
private void OnTimerElapsed(object state)
{
lock (Model.SyncRoot)
{
Update();
}
try {
if (App.IsAppActive()) {
Device.BeginInvokeOnMainThread(() => Model.InvalidatePlot(true));
} else {
timer.Dispose();
}
} catch {
}
}
推荐阅读
- c# - asp.net core 2.1 以 .Net Framework 为目标并在 IIS 上运行,无需托管包
- xslt - 如何使用 XSLT 转换和修改(!)嵌套标签?
- node.js - 将带有表单的文件从 nuxt 发送到节点服务器(nodemailer)
- r - 从多个纬度创建 SF 点
- swift - 将 translatesAutoResizingMaskIntoConstraints 设置为 false 会导致 UITextFields rightview 上的布局不明确问题
- graph - Acumatica - 图形扩展
- python-3.x - Python Spark - 如何在没有不同顺序的情况下删除集合中的重复元素?
- jquery - 如何使用 jquery 创建一个输入字段来处理像拉丁语这样的非拉丁字符?
- php - php - 具有多个模式的 preg_split() 不分割引用的字符串
- python - python中字典中的冒泡排序