2012-02-07 10 views
1

C#で簡単なエレベーターシステムを作成すると、フロア番号を入力してフロアを選択したときにエレベーターが働きました。その後、エレベーターがこのフロアに移動します。C#エレベーターシステム、一時停止

次の段階では、ボタンを使用して床を選択します。問題は、ユーザーが要求したエレベーターがフロアに到着し、プログラムがボタンからの入力を受け付けないときです。

これはリフトの動きを呼び出して、タイマーを切り替えるコードです。

private void liftOneMove() 
{ 
    if ((liftOne.Direction == 1) && (lift1.Value <= 40)) // while lifts going up and floor less/equal to 40 
    { 
     timer1.Enabled = true; 
    } 
} 

これはタイマー内のコードです:プロトタイプ用として

private void timer1_Tick(object sender, EventArgs e) 
{ 
    lift1.Value++; 
    liftOne.CurrentFloor = lift1.Value; 
    lblLift1Flr.Text = "" + lift1.Value; 
    if (liftOne.FloorRequests.Exists(element => element == lift1.Value)) 
    { 
     RbLift1.Checked = true; 
     lblLift1Current.Text = "Doors opening"; 
     //Need to pause the timer here to allow user to select a floor 
     liftOne.FloorRequests.Remove(lift1.Value); 

     if(liftOne.FloorRequests.Count == 0) 
     { 
      liftOne.Direction = 2; 
      timer1.Enabled = false; 
      MessageBox.Show("Floor Requests " + liftOne.FloorRequests.Count); 
     } 
    } 
} 
+0

私は、タイマースレッドのテキストボックス、ボタンなどのUIコントロールにアクセスしています。これは、いくつかの副作用を引き起こす可能性があります。 WPF/WinFormsのいずれかを使用しているフレームワークによって異なります。 – sll

+0

これは唯一のプロトタイプであり、私たちはそのようなことについて心配して、一時停止する必要があります最後のIFステートメントの前に、ユーザーからの入力を受け取ります。 –

+0

timer1.Enabled = falseを追加できますか?ブーリアンタイマーがオフになっている場合は、移動メソッドに渡して状態またはブール値をチェックします。あなたが私が見ているものから制御したいontimerイベント。 – MethodMan

答えて

0

、ユーザーが別のフロアを選択できるようにするには、このような何かをしたいことがあります。

RbLift1.Checked = true; 
lblLift1Current.Text = "Doors opening"; 

timer1.Enabled = false; // stop the first timer after reaching the floor 
timer2.Enabled = true; // start a second timer, which will restart the first timer in 5 seconds 

liftOne.FloorRequests.Remove(lift1.Value); 

と5秒で最初のタイマーを有効にするために、別のタイマーを使用します。

private void timer2_Tick(object sender, EventArgs e) 
{ 
    timer1.Enabled = true; // restart the first timer 
    timer2.Enabled = false; // stop the second timer 
} 

この5秒の期間中、ユーザーは別のフロアを選択することができます。

+0

あなたの解決策を試しました。システムがスレッディングしている間、UIをロックするので、ボタンを選択することはできません –

+0

@JoelTheManTheProgrammer更新されたソリューションをお試しください。 Thread.Sleep()を使わないでください。私はそれをテストし、停止せずに正常に動作します。 – Meysam

関連する問題