【问题标题】:System.ArgumentNullException in System.Threading.Monitor.EnterSystem.Threading.Monitor.Enter 中的 System.ArgumentNullException
【发布时间】:2010-12-11 22:17:16
【问题描述】:

我有这样的代码:

我们的一些客户在以下代码块中收到“System.Threading.Monitor.Enter 中的 System.ArgumentNullException”:

Public Class CheckStuff

   Private Shared SLock As New Object

   Public Sub GetIt()
          Synclock SLock
             DoSomething()
          End Synclock       
   End Sub
End Class

这怎么可能?考虑到SLock 是共享的,从未在其他任何地方接触过?

【问题讨论】:

  • 面临同样的问题。你有没有找到解决这个问题的方法?
  • 我也有这个问题。解决方案很简单——我没有实例化锁对象。

标签: .net multithreading exception monitor


【解决方案1】:

我的猜测是你把你的示例代码过于简化了——它必须从其他东西中被触及才能使它成为Nothing。或者,在CheckStuff 完成初始化之前调用您的锁定方法。堆栈跟踪会很有帮助。

【讨论】:

  • 这就是问题所在,我刚刚查找了所有参考资料,但没有。尽管来自 2 个客户的报告,但在我们的开发或测试环境中也从未发生过这种情况。
  • System.Threading.Monitor.Enter(obj As Object) .. ThreadAcc.exe: N 00000 .. GetIt() ... 从 GUI 调用
  • @dr.邪恶:恐怕我不知道那是要告诉我什么……请编辑您的问题以提供更多信息。 (然后通读你写的东西,假装你是一个不知道你想说什么的人。)
  • 您可能会在 weblogs.asp.net/psteele/pages/7717.aspx 找到对这种 VB.NET 行为的解释很有帮助。
  • @DennisGaravsky:考虑到问题中的代码,我看不出这有什么关系——Shared 变量不是方法的本地变量。
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 2018-02-13
  • 2015-09-27
  • 2016-02-24
  • 1970-01-01
相关资源
最近更新 更多