【解決方法】C# で信号機サイクルを自動化するにはどうすればよいですか?


こんにちは、私は現在学校で C# を学んでいます。 機能する信号機システムを作成することになっていました。 すでにフェーズをザッピングできますが、別のボタンを追加したいと思います。これは、アクション間の遅延ですべてを実行します。 私の質問は次のとおりです。このようなタイマーを設定するにはどうすればよいですか?

今までの私のコード:

void Button1Click(object sender, EventArgs e)
		{
			if (panel3.BackColor == Color.Green) 
			{
				panel2.BackColor = Color.Yellow;
				panel3.BackColor = Color.Black;
				panel5.BackColor = Color.Yellow;
			}
			
			else if (panel2.BackColor == Color.Yellow && panel1.BackColor == Color.Black) 
			{
				panel1.BackColor = Color.Red;
				panel2.BackColor = Color.Black;
				panel4.BackColor = Color.Black;
				panel5.BackColor = Color.Black;
				panel6.BackColor = Color.Green;
			}
			
			else if (panel1.BackColor == Color.Red && panel2.BackColor == Color.Black) 
			{
				panel2.BackColor = Color.Yellow;
				panel5.BackColor = Color.Yellow;
				panel6.BackColor = Color.Black;
			}
			
			else if (panel1.BackColor == Color.Red && panel2.BackColor == Color.Yellow) 
			{
				panel1.BackColor = Color.Black;
				panel2.BackColor = Color.Black;
				panel3.BackColor = Color.Green;
				panel5.BackColor = Color.Black;
				panel4.BackColor = Color.Red;

What I have tried:

I already googled of course but I couldn't seem to find somebody that explains it for SharpDevelop. I saw many people using VisualStudio, but I want to do it in SharpDevelop.

解決策 1

解決策 2

考えられる解決策は、async-await を使用することです (4.5 以上の .NET Framework で)。
この簡単な例は、.NET Framework 4.6.1 で作成しました。
この場合、ボタンクリック後の「Say Hello」の待機中に winform がフリーズせず、待機中の GUI を自由に動かすことができます。 おそらく、この async-await パターンはあなたのケースに適しています。 試してみることをお勧めします、
ブラジル

// .NET Framework 4.6.1
//-------------------------------
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private async void button1_Click(object sender, EventArgs e)
    {
      await Task.Delay(15000);
      MessageBox.Show("Say Hello");
    }
  }
}

コメント

タイトルとURLをコピーしました