VS 2015无法单步执行backgroundworker_dowork

时间:2015-11-26 07:59:09

标签: c# visual-studio-2015 backgroundworker

我在VS 2015中使用C#,将4.5.2框架作为普通Windows应用程序(实际上并不特别)。我最近从VS 2013移动了该项目,以防可能是一个因素。

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

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

  1. 打开VS 2015
  2. 新项目......
  3. Visual C#/ Windows / Classic Desktop
  4. 添加一个名为" tmr1&#34 ;;的计时器启用;间隔= 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 会有什么不同?

    我可能会遗漏一些非常明显的东西,我会很感激有人可以提供的任何见解。

1 个答案:

答案 0 :(得分:0)

VS 2015中的错误已在Update 1中修复

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

根据Help Center,这是主题,但由于它是一个固定的错误,也许应该删除整个问题。我将把它留在社区手中。