';无法访问已释放的对象';在Xamarin窗体中,自定义渲染器

';无法访问已释放的对象';在Xamarin窗体中,自定义渲染器,xamarin,xamarin.ios,xamarin.forms,Xamarin,Xamarin.ios,Xamarin.forms,在Xamarin表单中,我有以下类(没有内容): 导航堆栈上名为TracksPage.cs的ContentPage只包含TracksBoxView、标签和开关。TracksPage生成一些公共数据(需要几秒钟),然后设置一个由iOS自定义渲染器TracksBoxViewRenderer.cs轮询的标志。然后,自定义渲染器检索并显示信息 当用户导航到TracksPage(推送)时,信息将正确显示。然后用户点击“后退”按钮,几秒钟后再次导航到TracksPage。这是重复的。大约在第二次或第三次尝试

在Xamarin表单中,我有以下类(没有内容):

导航堆栈上名为TracksPage.cs的ContentPage只包含TracksBoxView、标签和开关。TracksPage生成一些公共数据(需要几秒钟),然后设置一个由iOS自定义渲染器TracksBoxViewRenderer.cs轮询的标志。然后,自定义渲染器检索并显示信息

当用户导航到TracksPage(推送)时,信息将正确显示。然后用户点击“后退”按钮,几秒钟后再次导航到TracksPage。这是重复的。大约在第二次或第三次尝试时,出现以下异常:

System.ObjectDisposedException: Cannot access a disposed object.
这会在自定义渲染器的以下行中发生:

double totalWidth = (double)this.Bounds.Width;
如果用户在两次尝试之间延迟30秒或更长时间,则大多数情况下都有效。我想象垃圾收集正在同时发生

在论坛中没有发现任何类似的内容


我能为此做些什么,也许有更好的方法或解决办法?这听起来像是Xamarin表单的bug吗?

这是我的一个基本错误。标签不是字段:(

我遗漏了一些上下文,你是说
是已处理对象错误的来源吗?这是
TracksBoxView
在回收器中吗?是@SushiHangover,引用“this”时会出现异常。我的理解是“this”代表视图。我没有实现任何类型的回收器。我有100多个标签视图中的ls(地图上的轨迹)。当我们返回到自定义渲染器的视图时,我们发现该视图与以前的视图完全相同。我本来希望有一个新视图。因此,我现在在添加100+标签之前删除了视图中的所有标签。如果标签的累积是个问题,但是没有帮助。更正-这是一个新视图-我在这一点上的错误。您可以尝试在类中重写Dispose方法,并设置一个断点以了解清理方法的位置。在将标签设置为字段后,您是否能够解决此问题?
double totalWidth = (double)this.Bounds.Width;