函数评估需要运行所有线程 - MVC

时间:2015-12-15 12:04:50

标签: asp.net-mvc debugging

将值从模型传递到IF语句中的参数时发生以下错误。

QuickWatch Error Description

Threads

这是问题发生的代码,我很确定它不是 ValidateUserPassword 方法。

        if (PSFNetSystem.ValidateUserPassword(model.Server, model.Username, model.Password) < 0)
        {
            ModelState.AddModelError("Password", "Failed to login");
            return View(model);
        }

感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:4)

简答:您可以点击&#34;线程&#34;右边的图标强制进行评估。

答案很长: 在调试器中评估方法时,调试器/ CLR将当前线程的上下文设置为正在评估的方法,设置保护断点,冻结除当前线程之外的所有线程,然后继续该过程。当命中断点时,调试器将线程恢复到先前的状态,并使用返回值填充窗口。

因为只有一个线程在运行,所以如果评估线程获得了另一个线程已经拥有的锁定,则可能会产生死锁情况。如果CLR检测到可能的死锁,则中止评估,调试器最终显示该消息。

单击按钮以允许所有线程运行意味着在重试评估时我们不会冻结其他线程。这将允许评估继续进行,但缺点是忽略其他线程上的断点。

顺便说一句,如果你编写的代码如果被评估可能会死锁,你可以调用Debugger.NotifyOfCrossThreadDependeny。这将导致您看到的行为。

答案 1 :(得分:0)

这是因为它需要运行代码以在调试器中显示结果。您可以按右侧的图标来评估它,或者您可以转到选项 - &gt;调试并关闭&#34;启用属性评估或其他隐式函数调用&#34;。