1

我的问题可能很简单。在 ac# 项目中,我试图在click事件的不同类中设置实例的状态。问题是我想在一段时间后执行此操作,并且没有任何 c# 经验,我发现这很难完成。

提前致谢!!

我的代码如下:

public void button1_Click(object sender, EventArgs e)
{
    kruispunt.zPad1.voetstoplicht1.setStatus(StoplichtStatus.Rood);
    kruispunt.zPad1.voetstoplicht2.setStatus(StoplichtStatus.Rood);            
    this.Refresh();            
}
4

1 回答 1

1

最简单的方法是使用async(假设您使用的是 C# 5):

public async void button1_Click(object sender, EventArgs e)
{
    await Task.Delay(Timespan.FromSeconds(5));
    kruispunt.zPad1.voetstoplicht1.setStatus(StoplichtStatus.Rood);
    kruispunt.zPad1.voetstoplicht2.setStatus(StoplichtStatus.Rood);            
    this.Refresh();            
}

另一种选择是使用Timer

public void button1_Click(object sender, EventArgs e)
{
    var timer = new System.Windows.Forms.Timer { Interval = 5000 };
    timer.Tick += delegate
    {
        timer.Dispose();
        kruispunt.zPad1.voetstoplicht1.setStatus(StoplichtStatus.Rood);
        kruispunt.zPad1.voetstoplicht2.setStatus(StoplichtStatus.Rood);
        this.Refresh();
    }
    timer.Start();
}

请注意,我使用的是 Windows 窗体计时器,而不是System.Timers.Timeror System.Threading.Timer; 这是因为事件必须发生在 UI 线程中,否则调用Refresh会失败。

于 2013-10-26T23:03:53.813 回答