2016-10-13 3 views
1

このコードはフォームで実行していますが、起動するとフリーズします。これは、です。は、他のコードの実行を停止します。私はこの作業中に別のワーカースレッドをセットアップしたい。しかし、私はこの特定のタスクのワーカースレッドを設定する方法を知らない。オブジェクトのブール値を継続的にチェックするようにワーカースレッドを設定する

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; 
      } 
     } 
    } 
+0

ループを使用しないでください。 'EventWaitHandle'を使用してください – Dai

答えて

3

マルチスレッド化の権利は簡単な作業ではなく、必要な場合にのみ行う必要があります。

私は代替案を持っている:ゲームオーバーのとき

あなたのコントローラgameがイベントを発生させます:

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(); } 
関連する問題