2

所以,我想要这个:如果从加载表单过去了特定时间(例如 9 小时),那么我想显示消息框说“9 小时过去了”。我的代码是这样的:

public partial class Form1 : Form
{
    Stopwatch stopWatch = new Stopwatch();

    public Form1()
    {
        InitializeComponent();
        stopWatch.Start();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        double sec = stopWatch.ElapsedMilliseconds / 1000;
        double min = sec / 60;
        double hour = min / 60;
        if (hour == 9.00D)
        {
            stopWatch.Stop();
            MessageBox.Show("passed: " + hour.ToString("0.00"));
        }
    }
}

问题是我不知道在哪里写这部分代码:

if (hour == 9.00D)
        {
            stopWatch.Stop();
            MessageBox.Show("passed: " + hour.ToString("0.00"));
        }

那么,我在哪里写这段代码?如果您有更好的方法,请告诉我。

4

5 回答 5

3

除了使用其他人概述的 Timer 之外,您还可以直接使用 Stopwatch.Elapsed 返回的 TimeSpan 的 TotalHours() 属性:

        TimeSpan ts = stopWatch.Elapsed;
        if (ts.TotalHours >= 9)
        {
            MessageBox.Show("passed: " + ts.TotalHours.ToString("0.00"));
        }
于 2013-05-09T13:00:50.877 回答
2

人们不明白的是,不太可能double hours正好是 9.00!为什么不让你的计时器在你想要的时间之后触发一次,9 小时。

Timer timer;
public Form1()
{
    InitializeComponent();
    timer.Tick += timer_Tick;
    timer.Interval = TimeSpan.FromHours(9).TotalMilliseconds;
    timer.Start();
}

void timer_Tick(object sender, EventArgs e)
{
    timer.Stop();
    MessageBox.Show("9 hours passed");
}
于 2013-05-09T13:05:03.703 回答
1

为了在特定时间后执行特定任务 System.Forms.Timer 应该使用(在 Windows 窗体的情况下)。您可以使用它的 Elapsed 事件,并且可以实现您的条件。

于 2013-05-09T12:50:01.843 回答
0

使用定时器

定时器定期调用代码。每隔几秒或几分钟,它就会执行一个方法。这对于监视重要程序的运行状况非常有用,就像诊断一样。System.Timers 命名空间被证明是有用的。

看到这个:

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            stopWatch.Start();
            tm.Interval = 1000;
            tm.Enabled = true; 
            tm.Tick += new EventHandler(tm_Tick);
            tm.Start();
        }

        void tm_Tick(object sender, EventArgs e)
        {
            double sec = stopWatch.ElapsedMilliseconds / 1000;
            double min = sec / 60;
            double hour = min / 60;
            if (hour == 9.00D)
            {
                stopWatch.Stop();
                MessageBox.Show("passed: " + hour.ToString("0.00"));
            }
        }
     }
于 2013-05-09T12:53:38.253 回答
0

尝试改用计时器。来自这里的示例

Timer timer;
public Form1()
{
    InitializeComponent();
    timer.Tick += new EventHandler(timer_Tick); // when timer ticks, timer_Tick will be called
    timer.Interval = (1000) * (10);             // Timer will tick every 10 seconds
    timer.Enabled = true;                       // Enable the timer
    timer.Start();                              // Start the timer
}

void timer_Tick(object sender, EventArgs e)
{
    double sec = stopWatch.ElapsedMilliseconds / 1000;
    double min = sec / 60;
    double hour = min / 60;
    if (hour == 9.00D)
    {
        stopWatch.Stop();
        MessageBox.Show("passed: " + hour.ToString("0.00"));
    }
}
于 2013-05-09T12:53:30.900 回答