我在使用线程的WinFrm应用上有错误。这段代码运行良好:
private void button1_Click(object sender, EventArgs e)
{
bool keepGoing = true;
Task.Factory.StartNew(()=>
{
while (keepGoing)
{
try
{
Thread.Sleep(500);
}
catch (Exception ex)
{
throw;
}
}
});
}
请注意事件处理程序中的bool keepGoing变量。如果我将bool keepGoing放在事件处理程序之外并在循环中放置一个断点,Visual Studio将停止工作。
bool keepGoing = true;
private void button1_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(()=>
{
while (keepGoing)
{
try
{
Thread.Sleep(500);
}
catch (Exception ex)
{
throw;
}
}
});
}
}
这是使用Win 10和VS2015以及.net 4.52的完整代码。只有当您在while循环中的第二个示例上设置断点时,VS才会运行它。为什么会这样?我试图实现两个代码版本以完全相同的方式运行 - 我的机器上的第二个版本存在问题,但我不知道它可能是什么。
答案 0 :(得分:0)
尝试以这种方式进行测试:
bool keepGoing = true;
private void button1_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(Work);
}
private void Work()
{
while (keepGoing)
{
try
{
Thread.Sleep(500);
}
catch (Exception ex)
{
throw;
}
}
}