C# 如何排除故障:为什么我可以';你拿不到锁吗?

C# 如何排除故障:为什么我可以';你拿不到锁吗?,c#,visual-studio-2010,C#,Visual Studio 2010,在调试器中,当执行这样一行代码时,我“冻结”了:lock(myvar)显然有人在持有myvar。然而,我希望在这一行,myvar应该是免费的。因此,我想知道代码的哪一部分保存着myvar(不同于另一个线程)。我该怎么做?我知道哪个线程持有它(因为我只有一个其他线程),但我不知道在哪里 upd问题解决后,我忘记在一个Monitor.TryEnter(myvar)之后调用Monitor.Exit(myvar)lock()语句使用了Monitor类,该类不支持查询锁定线程。 在fx4.5中,您可以检查

在调试器中,当执行这样一行代码时,我“冻结”了:
lock(myvar)
显然有人在持有
myvar
。然而,我希望在这一行,
myvar
应该是免费的。因此,我想知道代码的哪一部分保存着
myvar
(不同于另一个线程)。我该怎么做?我知道哪个线程持有它(因为我只有一个其他线程),但我不知道在哪里

upd问题解决后,我忘记在一个
Monitor.TryEnter(myvar)

之后调用
Monitor.Exit(myvar)
lock()
语句使用了
Monitor
类,该类不支持查询锁定线程。
在fx4.5中,您可以检查Monitor.IsEntered(myVar)
,仅此而已

其余部分应该来自代码的逻辑

语句使用不支持查询锁定线程的
Monitor
类。
在fx4.5中,您可以检查Monitor.IsEntered(myVar),仅此而已



其余部分应该来自代码的逻辑

如果您使用的是
Visual Studio 2010
您可以查看如果您使用的是
Visual Studio 2010
您可以查看您的代码有多少个锁语句???@AndrewBarber我只有一个锁语句,我不明白它如何保持锁。所以我想在调试器中确定问题是否存在。。。。我决定添加Console.Writeln(“获取锁”)和Console.Writeln(“释放锁”)跟踪…那些
Console.Writeline()
s非常昂贵,可能会改变时间。@Henkholtman我知道,但这至少是我可以尝试的。你的代码有多少个lock语句???@AndrewBarber我只有一个lock语句,我不明白它是如何保持lock的。所以我想在调试器中确定问题是否存在。。。。我决定添加Console.Writeln(“获取锁”)和Console.Writeln(“释放锁”)跟踪…那些
Console.Writeline()
s非常昂贵,可能会改变时间。@Henkholtman我知道,但这至少是我可以尝试的。有一个
监视器.IsEntered
方法?@Jon仅当您使用.NET 4.5时使用。@Jon-仅在最新版本中使用。这意味着除了查看代码之外,我没有其他方法了?如果我没有发现问题,我最好看看我的代码:)只有在使用.NET 4.5时才有
监视器.IsEntered
方法?@Jon.@Jon-仅在最新版本中。这意味着除了查看代码之外,我没有其他方法了?如果我没有发现问题,我最好看看我的代码:)如何使用它我可以找到线程或地方“锁定”我的变量?你可以看到哪些线程正在运行可以减少/本地化搜索。。。与
Monitor.IsEntered相同,它只通知您
Monitor
已被锁定,但这是另一个问题…如何使用它我可以找到线程或“锁定”我的变量的位置?您可以看到现在正在运行的线程可以减少/本地化搜索。。。与
Monitor.IsEntered
相同,它只通知您
监视器
已锁定,但由谁锁定是另一个问题。。。