Windows窗体线程错误

时间:2015-12-04 13:50:37

标签: c# multithreading winforms visual-studio

我在使用线程的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才会运行它。为什么会这样?我试图实现两个代码版本以完全相同的方式运行 - 我的机器上的第二个版本存在问题,但我不知道它可能是什么。

1 个答案:

答案 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;
            }
        }
    }