【问题标题】:System.WIndows.Application static members are thread safe?System.WIndows.Application 静态成员是线程安全的吗?
【发布时间】:2011-01-28 16:24:18
【问题描述】:

应用程序的静态成员应该是线程安全的:

公共静态(Shared in Visual Basic) 这种类型的成员是线程 安全的。此外,FindResource 和 TryFindResource 方法和 属性和资源属性 是线程安全的。1

在多线程环境中调用 System.Windows.Application 的静态成员方法时,我们能在多大程度上信任该语句?

更新:
都参考了这个问题:Threading errors with Application.LoadComponent (key already exists)

我从没想过我会在库中看到一个真正的错误,但这对我来说一定是这一天......这个问题似乎显示了一个真正的错误。通常是“用户错误”,但似乎并非如此。

【问题讨论】:

  • 我想说,您可以信任该声明,就像您可以信任文档中的任何其他内容一样。您是否发现某些具体内容不真实或有疑问?

标签: c# wpf multithreading thread-safety


【解决方案1】:

这是 .Net 框架和相关库的一般模式。除非另有标记,否则静态/共享成员被假定为线程安全的。如果您发现一个不是线程安全的成员并且在文档中未标记为这样,则它是一个错误(在文档或实现中)。

因此,我认为依靠它们是线程安全的是安全的。

【讨论】:

  • 嗯,我想 Kellls 一定发现了一个错误:stackoverflow.com/questions/2463822/…
  • @Lirik,在这种情况下,似乎其中一个存在错误。我跟进了那个线程,看看是否有人提交了错误。 AFAIK,该方法可以不是线程安全的,但如果是这样,应该更新文档。
【解决方案2】:

一般来说,一开始你应该相信文档,但当事情不像宣传的那样工作时,就不要再相信它了。

在这种情况下,由于 WPF 中的错误,文档是错误的。有关该错误的详细信息,请参阅this answer

【讨论】:

  • 这就是我问它的原因:)...我是第一个回答这个问题的人。
猜你喜欢
  • 2013-12-10
  • 2012-03-10
  • 2011-11-29
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多