我在VS 2015中使用C#,将4.5.2框架作为普通Windows应用程序(实际上并不特别)。我最近从VS 2013移动了该项目,以防可能是一个因素。
现在,当我按F5时,我可以通过Form_Load事件逐行(逐行)。然后一个计时器滴答作响,我也可以逐步完成该代码。计时器自动停止并调用bgw1.RunWorkerAsync()。我可以在bgw1.DoWork例程中设置一个断点,它会停止但是一旦它停止,我就会得到一个旋转的磁盘,我必须等待几秒才能重新获得对VS的控制权。然后,暂时,每个看起来正常。我按F10进行第一行,然后一切都停止运行,正如人们所期望的那样(VS看起来它正在运行代码,但似乎并没有发生)。
这很容易重现(在我的系统上):
我可以单步执行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 会有什么不同?
我可能会遗漏一些非常明显的东西,我会很感激有人可以提供的任何见解。
答案 0 :(得分:0)
VS 2015中的错误已在Update 1中修复。
更新到VS2015.1后,它可以正常工作(可以单步执行backgroundworker_dowork)。
根据Help Center,这是主题,但由于它是一个固定的错误,也许应该删除整个问题。我将把它留在社区手中。