VS 2015 无法单步执行 backgroundworker_dowork

VS 2015 Cannot step through backgroundworker_dowork

我在 VS 2015 中使用 C#,针对普通 Windows 应用程序的 4.5.2 框架(实际上没什么特别的)。我最近将项目从 VS 2013 移走,以防这可能是一个因素。

现在,当我按 F5 时,我可以(逐行)单步执行 Form_Load 事件。然后计时器滴答作响,我也可以单步执行该代码。计时器自行停止并调用 bgw1.RunWorkerAsync()。我可以在 bgw1.DoWork 例程中设置一个断点,它确实会停止,但一旦它停止,我就会得到一个旋转的磁盘,我必须等待几秒钟才能重新获得对 VS 的控制权。然后,有那么一会儿,每个 看起来 都正常。我按 F10 进入一行,然后一切都停止了,正如人们所期望的那样(VS 看起来是 运行 代码,但似乎并没有发生)。

这超级容易重现(在我的系统上):

  1. 打开 VS 2015
  2. 新项目...
  3. Visual C#/Windows/经典桌面
  4. 添加一个名为"tmr1"的计时器;启用;间隔=1000
  5. 添加后台工作人员
  6. 将 Form1 代码更改为您在下面看到的内容
  7. 在包含"a = "
  8. 的每一行设置断点

我可以单步执行 Form_Load、Tmr1_Tick,但不能单步执行 bgw1_DoWork。

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace BGWTest
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        int a, b, c;
        a = 5; // <-- breakpoint here (can step through this routine)
        b = 7;
        c = a * b;
        this.Text = c.ToString();
        tmr1.Start();
    }

    private void tmr1_Tick(object sender, EventArgs e)
    {
        tmr1.Stop();

        int a, b, c;
        a = 15;  // <-- breakpoint here (can step through this routine)
        b = 17;
        c = a * b;
        this.Text = c.ToString();
        bgw1.RunWorkerAsync();
    }

    private void bgw1_DoWork(object sender, DoWorkEventArgs e)
    {
        int a, b, c;
        a = 25;  // <-- breakpoint here (here is where the problem begins)
        b = 27;
        c = a * b;
        UpdateText(c);
    }

    private delegate void UpdateTextCallback(int value);
    private void UpdateText(int value) {
        if (InvokeRequired) {
            UpdateTextCallback deleg = new UpdateTextCallback(UpdateText);
            this.Invoke(deleg, new object[] { value });
        } else {
            this.Text = value.ToString();
        }
    }
}
}

我破解了代码(在尝试在 bgw_dowork 中迈出一步之后)但​​它位于启动表单的 Application.Run() 行。该表单的行为就好像它不是 运行 任何东西(UI 中没有任何更新)。

顺便说一句,只要我不破坏 bgw_dowork 例程,一切正常。

这是我以前从未见过的东西,我在 SO 或其他任何地方都没有发现任何有用的东西。我发现有人说删除 .suo 文件就可以了。我这样做了,没用。

然后我意识到我刚刚安装了 NUnit(通过 nuget),所以我删除了它,但问题仍然存在。

然后我删除了我所有的临时文件,没有帮助。然后我修复了我的 VS 2015 安装,但问题仍然存在。然后我卸载并重新安装了VS 2015,但问题是一样的。 相同的代码在 VS 2013 中运行良好...所以 VS 2015 有什么不同?

我可能遗漏了一些非常明显的东西,如果有人能提供任何见解,我将不胜感激。

这是 VS 2015 中的一个错误,已在更新 1 中修复。

更新到 VS2015.1 后它工作正常(可以单步执行 backgroundworker_dowork)。

根据 Help Center,这是切合主题的,但由于它是一个已修复的错误,也许应该删除整个问题。我会把它留给社区。