在開始使用來自使用弱引用的開源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:
您使用的是什麼版本的.NET,哪個版本使用該框架? – Tigran
@Tigran。我所有的程序集都是4.0。我將代碼複製到現有的程序集中,因此沒有引用PropertyObserver的框架DLL。引發的Inflector代碼是在一個DLL中,可能是一箇舊版本(不知道如何確定,但肯定) – Berryl
異常實際上是由正則表達式觸發的,它也使用弱引用。堆棧跟蹤非常不完整。 Quacks就像庫代碼中的一個bug。尋找使用不當的析構函數。 –