1

如何使用超时更改按钮的文本?我尝试了以下代码,但它不起作用。

private void button1_Click(object sender, EventArgs e)
{
    Stopwatch sw = new Stopwatch();
    sw.Start();
    if (button1.Text == "Start")
    {
        //do something
        button1.Text = "stop"
        if (sw.ElapsedMilliseconds > 5000)
        {
            button1.Text = "Start";

        }
    }

如何更正我的代码?

4

5 回答 5

6

您需要改用Timer

Timer t = new Timer(5000); // Set up the timer to trigger on 5 seconds
t.SynchronizingObject = this; // Set the timer event to run on the same thread as the current class, i.e. the UI
t.AutoReset = false; // Only execute the event once
t.Elapsed += new ElapsedEventHandler(t_Elapsed); // Add an event handler to the timer
t.Enabled = true; // Starts the timer

// Once 5 seconds has elapsed, your method will be called
void t_Elapsed(object sender, ElapsedEventArgs e)
{
    // The Timer class automatically runs this on the UI thread
    button1.Text = "Start";
}

秒表仅用于测量自您调用 Start() 以来已经过去了多少时间。

于 2013-10-30T12:06:43.370 回答
0

如果您使用的是 C# 5

private async void button1_Click(object sender, EventArgs e)
{
    button1.Text = "Stop";

    await Task.Delay(5000);

    button1.Text = "Start";
}
于 2013-10-30T12:08:08.297 回答
0

我认为你可以通过使用来达到你的目标Timer

使用示例Timer

public partial class FormWithTimer : Form
{
    Timer timer = new Timer();

    public FormWithTimer()
    {
        InitializeComponent();

        // Everytime timer ticks, timer_Tick will be called
        timer.Tick += new EventHandler(timer_Tick);
        timer.Interval = (1000) * (1); // Timer will tick every second
        timer.Enabled = true; // Enable the timer
    }

    //    .......    

    showForm() // declaration
    {
        timer.start();
        //    .......
        timer.stop();
    }            

    void timer_Tick(object sender, EventArgs e)
    {
        //hide form...through visibility
    }
}
于 2013-10-30T12:08:16.603 回答
0

使用它而不是秒表:

private void button1_Click(object sender, EventArgs e)
{
    button1.Text = "stop"
    aTimer = new System.Timers.Timer(5000);

    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
    aTimer.Enabled = true;
}

// Specify what you want to happen when the Elapsed event is  raised. 
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    button1.Text = "Start";
    var atim = source as Timer;
    if (atim != null)
       atim.Elapsed  -= OnTimedEvent;
}
于 2013-10-30T12:08:17.307 回答
0

你可以使用计时器。在此示例中,按钮的文本在 5 秒后变为“停止”。

private Timer timer = new Timer();

private void button1_Click(object sender, EventArgs e)
{
    timer.Interval = 5000; // interval length
    timer.Tick += TimerOnTick; 
    timer.Enabled = true; // activate timer
    button1.Text = "Start";
}

private void TimerOnTick(object sender, EventArgs eventArgs)
{
    timer.Enabled = false; // deactivate timer
    button1.Text = "Stop";
}
于 2013-10-30T12:10:01.553 回答