C# 设置辅助线程以连续检查对象的布尔值

C# 设置辅助线程以连续检查对象的布尔值,c#,winforms,C#,Winforms,我正在表单中运行此代码,但当我启动它时,它会冻结。这是因为while会阻止其他代码运行。我想为此while任务设置一个单独的工作线程。但是,我不知道如何为此特定任务设置工作线程 public void startGame(Form sender) // Form that is being send is an mdiContainer { View view = new View(); Controller game = new Control

我正在表单中运行此代码,但当我启动它时,它会冻结。这是因为while会阻止其他代码运行。我想为此while任务设置一个单独的工作线程。但是,我不知道如何为此特定任务设置工作线程

    public void startGame(Form sender) // Form that is being send is an mdiContainer
    {

        View view = new View();
        Controller game = new Controller(view);

        view.MdiParent = sender; //Here i tell the other form it's parent is sender
        view.Visible = true;

        //problem code
        while (true) 
 //This loop is supposed to keep checking if the game has ended and if it did, close the form view.
        {
            if(game.gameOver == true)
            {
                view.Close();
                break;
            }
        }
    }

获得正确的多线程不是一项容易的任务,只有在真正必要时才能完成

我有另一个建议:

游戏结束时,您的控制器
游戏
会引发一个事件:

class Controller
{
    ...

    public event EventHandler GameFinished;

    private bool gameOver;
    public bool GameOver 
    {
        get { return gameOver; }
        set
        {
            gameOver = value;
            if (gameOver)
                GameFinished?.Invoke(this, new EventArgs());
        }
    }
}
包含
startGame
的类向该事件添加处理程序,并在引发事件时关闭视图:

View view = new View();
Controller game = new Controller(view);

...

game.GameFinished += (sender, e) => { view.Close(); }

不要使用循环。使用
EventWaitHandle