【问题标题】:changing text of button with timeout in c#在 C# 中使用超时更改按钮的文本
【发布时间】:2013-11-09 23:52:34
【问题描述】:

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

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";

        }
    }

如何更正我的代码?

【问题讨论】:

  • 我认为您必须为此设置 Timer...

标签: c# .net winforms timer timeout


【解决方案1】:

您需要改用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() 以来已经过去了多少时间。

【讨论】:

    【解决方案2】:

    如果您使用的是 C# 5

    private async void button1_Click(object sender, EventArgs e)
    {
        button1.Text = "Stop";
    
        await Task.Delay(5000);
    
        button1.Text = "Start";
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用计时器。在此示例中,按钮的文本在 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";
      }
      

      【讨论】:

        【解决方案4】:

        我认为您可以通过使用 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
            }
        }
        

        【讨论】:

          【解决方案5】:

          用这个代替秒表:

          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;
          }
          

          【讨论】:

          • 我尝试了您的代码,但有时按钮的文本会在 5 秒前更改,而有时它工作正常。感谢您的回复。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-13
          • 1970-01-01
          • 2010-12-18
          • 2015-11-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多