在开始使用来自使用弱引用的开源MVVM框架的类来防止内存泄漏之后,我开始获得以下异常。
此类称为PropertyObserver,“处理其他对象的INotifyPropertyChanged.PropertyChanged事件的标准方法。此类使用弱引用和弱事件模式来防止内存泄漏。”
该异常的触发器是退出WPF应用程序,其中ShellVm具有对MasterVm的引用,该MasterVm引用了多个DetailVms,每个DetailVms都包含上述PropertyObserver。 MasterVm最终是静态Inflector类的使用者,用于对此进行复数化和大写化,这就是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:
答案 0 :(得分:2)
我会尝试给出一种建议,就像我多年前遇到过的那样。说实话,我没有为它找到真正的解决方案。在改变建筑之后,首先是粗略的。
我担心没有其他解决方案,只需尝试在销毁对象(粗略解决方案)上调用GC.Collect(),或者只是更改MVVM框架。
用谷歌搜索后:
简而言之,这与WeakReferences
的不同版本中出现的.NET Framework
错误有关。