【问题标题】:The function evaluation requires all threads to run - MVC函数求值需要所有线程运行 - MVC
【发布时间】:2015-12-15 12:04:49
【问题描述】:

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

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

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

感谢您的帮助。

【问题讨论】:

    标签: asp.net-mvc debugging


    【解决方案1】:

    简答:您可以点击右侧的“线程”图标强制评估。

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

    因为只有一个线程在运行,如果评估线程获取已被另一个线程持有的锁,则可能会产生死锁情况。如果 CLR 检测到可能的死锁,它会中止评估,并且调试器最终会显示该消息。

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

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

    【讨论】:

      【解决方案2】:

      这是因为它需要运行代码才能在调试器中显示结果。您可以按右侧的图标进行评估,也可以转到选项->调试并关闭“启用属性评估或其他隐式函数调用”。

      【讨论】:

      • 感谢您的回复,我刚刚按照您的说明关闭“启用属性评估或其他隐式函数调用”,但仍然没有运气。
      • 在没有附加调试器的情况下运行会发生什么?
      • 您也可以尝试从您正在调用的函数中调用 System.Diagnostics.Debugger.NotifyOfCrossThreadDependency()..
      猜你喜欢
      • 2013-11-04
      • 2011-05-26
      • 2020-08-19
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      相关资源
      最近更新 更多