弱引用相关异常
问题描述:
在开始使用来自使用弱引用的开源MVVM框架中的类来防止内存泄漏后,我开始获取下面的异常。弱引用相关异常
该类被称为PropertyObserver,“处理其他对象的INotifyPropertyChanged.PropertyChanged事件的标准方式。该类使用弱引用和弱事件模式来防止内存泄漏。”
异常的触发器是退出WPF应用程序,其中ShellVm具有对MasterVm的引用,该MasterVm引用了多个DetailVms,每个DetailVms都包含上述PropertyObserver。 MasterVm最终是静态Inflector类的消费者,用于复数化和大写this,并且这是WeakReference相关异常被抛出的地方。
我不能说我完全明白这个例外,所以我想这就是出发点。我将如何开始解决这个问题?
干杯,
Berryl
System.InvalidOperationException was unhandled by user code
Message=Handle is not initialized.
Source=mscorlib
StackTrace:
at System.WeakReference.set_Target(Object value)
at System.Text.RegularExpressions.Regex.Replace(String input, String replacement, Int32 count, Int32 startat)
at System.Text.RegularExpressions.Regex.Replace(String input, String replacement)
at Inflector.Inflector.Rule.Apply(String word)
at Inflector.Inflector.ApplyRules(List`1 rules, String word)
at Inflector.Inflector.Pluralize(String word)
at Smack.Core.Lib.TextUtil.StringEx.Pluralize(String s)
at Smack.Core.Lib.TextUtil.StringEx.PluralizeWithCount[T](String s, IEnumerable`1 collection)
at Smack.Core.Presentation.Wpf.ViewModels.MasterDetailVms.GenericMasterViewModel`2.get_Status()
的InnerException:
答
会尽量给一个suggession,因为这样的事情我很多年前认识。说实话,我没有找到一个真正的解决方案。首先是一个粗略的,在改变建筑之后。
恐怕没有其他解决方案了,那么只需试试就可以调用GC.Collect()来销毁对象(粗略的解决方案),或者只是改变MVVM框架。
google搜索了一些后:
总之这是一件关系到存在于不同版本的.NET Framework
WeakReferences
错误。
祝你好运。
您使用的是什么版本的.NET,哪个版本使用该框架? – Tigran
@Tigran。我所有的程序集都是4.0。我将代码复制到现有的程序集中,因此没有引用PropertyObserver的框架DLL。引发的Inflector代码是在一个DLL中,可能是一个旧版本(不知道如何确定,但肯定) – Berryl
异常实际上是由正则表达式触发的,它也使用弱引用。堆栈跟踪非常不完整。 Quacks就像库代码中的一个bug。寻找使用不当的析构函数。 –