0

我试图在预定义的时间过去后重复代码执行,我不想通过使用线程来搞砸事情。下面的代码是一个好习惯吗?

Stopwatch sw = new Stopwatch(); // sw constructor
EXIT:
    // Here I have my code
    sw.Start();
    while (sw.ElapsedMilliseconds < 100000)
    {
        // do nothing, just wait
    }

    System.Media.SystemSounds.Beep.Play(); // for test
    sw.Stop();
    goto EXIT;
4

2 回答 2

4

使用计时器而不是标签和StopWatch. 您正在忙于等待,将 CPU 紧紧地束缚在这个循环中。

您启动一个计时器,给它一个触发时间间隔(100000 毫秒),然后在事件的事件处理程序中运行您的代码Tick

请参阅MSDN 杂志中的 .NET Framework 类库中的比较计时器类。

于 2012-04-06T08:51:39.033 回答
2

您可以使用 Oded 建议的计时器:

public partial class TestTimerClass : Form
{
    Timer timer1 = new Timer(); // Make the timer available for this class.
    public TestTimerClass()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        timer1.Tick += timer1_Tick; // Assign the tick event
        timer1.Interval = 1000; // Set the interval of the timer in ms (1000 ms = 1 sec)
        timer1.Start(); // Start the timer
    }

    void timer1_Tick(object sender, EventArgs e)
    {
        System.Media.SystemSounds.Beep.Play();
        timer1.Stop(); //  Stop the timer (remove this if you want to loop the timer)
    }
}

编辑:只是想告诉你如何制作一个简单的计时器,如果你不知道如何:)

于 2012-04-06T08:58:04.110 回答