【问题标题】:Weak reference related exception弱引用相关异常
【发布时间】:2011-09-29 18:27:32
【问题描述】:

在开始使用开源 MVVM 框架中的一个类后,我开始收到以下异常,该框架使用弱引用来防止内存泄漏。

这个类叫做PropertyObserver,“一种处理其他对象的INotifyPropertyChanged.PropertyChanged事件的标准化方法。这个类使用弱引用和弱事件模式来防止内存泄漏。”

异常的触发器是退出 WPF 应用程序,其中 ShellVm 具有对 MasterVm 的引用,该 MasterVm 具有对多个 DetailVm 的引用,每个 DetailVm 都包含上述 PropertyObserver。 MasterVm 最终是静态 Inflector 类的消费者,该类用于复数和大写 this 和 that,这就是引发 WeakReference 相关异常的地方。

我不能说我完全理解异常,所以我想这就是起点。我将如何着手解决这个问题?

干杯,
浆果

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()

内部异常:

【问题讨论】:

  • 您使用什么版本的 .NET 以及哪个版本使用该框架?
  • @Tigran。我所有的程序集都是 4.0。我将代码复制到现有程序集中,因此没有引用 PropertyObserver 的框架 dll。抛出的 Inflector 代码位于 dll 中,并且可能是旧版本(虽然不确定如何确定)
  • 异常实际上是由Regex触发的,它也使用了weak refs。堆栈跟踪非常不完整。嘎嘎声就像库代码中的错误。寻找被不当使用的析构函数。
  • @HansPassant。就是这样,析构函数中的一些日志记录行,其中值为空 - 谢谢!为什么不将其放在答案格式中,以便我可以将其标记为这样?干杯

标签: c# weak-references


【解决方案1】:

会尝试提供建议,就像我多年前遇到的这样的事情。老实说,我没有找到 真正的 解决方案。首先是一个粗略的,在只是改变一个架构之后。

恐怕没有其他解决方案,那就尝试在销毁对象时调用 GC.Collect()(粗略的解决方案),或者只是更改 MVVM 框架。

谷歌搜索后:

Handle not initialized1

Handle not initialized2

简而言之,这与 .NET Framework 的不同版本中存在的 WeakReferences 错误有关。

祝你好运。

【讨论】:

  • 这听起来并不令人鼓舞……叹息,改天
  • @Berryl:可悲,但确实如此。也许您可以下载它,在 .NET 4.0 下重新编译,并希望“解决”您的问题...
  • 在我看到汉斯的评论之前,我确实这样做了。问题是 WeakRef 以某种方式加剧的流氓析构函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多