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);
}
}
}
私は、タイマースレッドのテキストボックス、ボタンなどのUIコントロールにアクセスしています。これは、いくつかの副作用を引き起こす可能性があります。 WPF/WinFormsのいずれかを使用しているフレームワークによって異なります。 – sll
これは唯一のプロトタイプであり、私たちはそのようなことについて心配して、一時停止する必要があります最後のIFステートメントの前に、ユーザーからの入力を受け取ります。 –
timer1.Enabled = falseを追加できますか?ブーリアンタイマーがオフになっている場合は、移動メソッドに渡して状態またはブール値をチェックします。あなたが私が見ているものから制御したいontimerイベント。 – MethodMan