C# 设置辅助线程以连续检查对象的布尔值
我正在表单中运行此代码,但当我启动它时,它会冻结。这是因为while会阻止其他代码运行。我想为此while任务设置一个单独的工作线程。但是,我不知道如何为此特定任务设置工作线程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
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