当列表项的属性从另一个屏幕更改时,我得到一个ObjectDisposedException。 这是我的渲染器代码。
namespace SmartwebsCrossPlatform.CustomRenderers {
public class GradientViewCellRenderer : ViewCellRenderer {
View cellCore;
protected override View GetCellCore( Cell item, View convertView, ViewGroup parent, Context context ) {
cellCore = base.GetCellCore( item, convertView, parent, context );
DirtyChanged();
return cellCore;
}
protected override void OnCellPropertyChanged( object sender, PropertyChangedEventArgs e ) {
base.OnCellPropertyChanged( sender, e );
if (e.PropertyName == "IsDirty" )
DirtyChanged();
}
void DirtyChanged( ) {
var viewCell = Cell as GradientViewCell;
if( cellCore != null && viewCell != null) {
int r = viewCell.IsDirty
? Resource.Drawable.listViewGradientDirty
: Resource.Drawable.listViewGradient;
try {
cellCore.SetBackgroundResource( r );
} catch ( ObjectDisposedException ex ) {
Log.Warning( ex, "GradientViewCellRenderer.DirtyChanged" );
}
}
}
}
}
问题:如何检测是否已在DirtyChanged中处理了cellCore?
答案 0 :(得分:0)
在线搜索后,我找不到检测IDisposable
对象的好方法。
为了避免不必要的处置,我们可以尝试更改GC Bridges以查看它是否有效。
在environment.text
项目中创建一个Xamarin.Android
文件,BuildAction
设置为AndroidEnvironment
。
然后,您可以通过将GC_BRIDGE
,bridge-implementation=old
或bridge-implementation=new
传递给bridge-implementation=tarjan
环境变量,指定您的应用应使用哪个MONO_GC_PARAMS
选项
请参阅https://blog.xamarin.com/xamarin-android-garbage-collection-improvements/