调试期间的Visual Studio:函数评估需要运行所有线程

Mai*_*aik 67 c# visual-studio-debugging

调试时我突然遇到一个奇怪的错误.到目前为止,监视窗口中的变量已正确显示.现在我总是在监视窗口中收到错误消息:

功能评估需要运行所有线程

我不能再检查任何变量了.我没有明确地使用线程.我该怎么办才能让它再次运作?

我在某些论坛中已经禁用了调试器的选项窗口中的函数:"启用属性评估和其他隐式函数调用".但没有成功,那我得到错误:

错误隐式函数评估由用户禁用

MUG*_*G4N 82

来自msdn论坛:

这本身并不是错误,而是调试器的更多功能.某些属性需要执行代码才能读取属性,但如果这需要跨线程交互,则其他线程也可能必须运行.调试器不会自动执行此操作,但当然可以在您的许可下执行此操作.只需单击小评估图标,它将运行您的代码并评估属性.

在此输入图像描述

有关此行为的更多详细信息,请查看此优秀文章

  • 我读过这篇文章.我没有这样的按钮可以点击,所以不完全是我的问题.奇怪的是,自从我今天升级到Visual Studio 2015 RC以来它一直在工作. (9认同)
  • 如果您没有看到任何图标,请尝试修改变量/命令以从监视窗口执行查询,而不是使用下拉列表来探索它的属性.例如,添加`.ToList()`或`.Any()`. (4认同)
  • 文章上的链接已失效。 (4认同)
  • 我不确定为什么但是在我的查询上调用.ToList()修复了这个问题 (3认同)
  • 这里同样的问题:http://stackoverflow.com/questions/4460206/lazyt-the-function-evaluation-requires-all-threads-to-run (2认同)
  • @J.柯克。我发现了同样的事情 - 谢谢!我一直在使用 `var` 和 `IEnumerable<T>` 并且只是分配 `db.AGENCY_TABLE.OrderBy(e => e.Name);` - 但是一旦我将 `var` 与 `.ToList()` (或`List<T>` 和 `.ToList()` 也有效),它揭示了结果! (2认同)
  • 我花了很多年的时间来制作临时变量和各种废话,因为我不知道那个小按钮。 (2认同)
  • 由于某种原因,MS 决定不将原始博客链接重定向到正确的存档链接。文章更正后的链接是:【为什么我们会得到“函数求值需要所有线程运行”| Microsoft Learn](https://learn.microsoft.com/en-us/archive/blogs/eliofek/why-do-we-get-the-function-evaluation-requires-all-threads-to-run) (2认同)

vap*_*guy 18

我只是尝试使用Entity Framework从名为"AGENCY"的表中获取项目时遇到了这个问题:

var agencies = db.AGENCY.OrderBy(e => e.FULLNAME);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在调试模式下将鼠标悬停在代理上,单击以展开选项,然后单击结果将给出可怕的"功能评估需要所有线程运行",并在末尾显示"请勿输入"图标,在该图标上单击不执行任何操作.

2种可能的解决方

  1. 最后添加.ToList():

    var agencies = db.AGENCY_TABLE.OrderBy(e => e.FULLNAME).ToList();

    List<AGENCY_TABLE> agencies = db.AGENCY_TABLE.OrderBy(e => e.FULLNAME).ToList();

    归功于Hp93,帮助我找到这个解决方案.在上MUG4N的答案在我发现这个解决办法的意见,同时也提到了努力.Any(),而不是.ToList(),但是这给布尔代替<T>,就像<AGENCY>是,所以它可能不会帮助.

  2. 解决方法 - 在调试选项中尝试不同的路径.我发现我可以单击"非公共成员">"_internalQuery">"ObjectQuery">"结果视图"并以这种方式获取我的值.

在此输入图像描述


Ewa*_*wan 7

MUG4N确实提供了正确的答案,但是,如果将鼠标悬停在调试中的代码行上,则可能会看到类似以下的内容。如果是这样,请点击下图中突出显示的小重新评估图标...

在此处输入图片说明

注意:我是通过固定来获得此图像的,通常重新评估的图标位于窗口的中间,而不是位于左手栏的下方。