如果计时器在button_click事件处理程序中编码,则计时器工作正常,但如果它在方法内部则不起作用

时间:2011-08-02 17:02:00

标签: c#

我从网站上找到了定时器代码,并在我的应用程序中使用它,如果我在button_click处理程序中使用定时器代码,它工作正常,但我需要在调用方法时使用定时器,所以我做了复制和将button_click中的相同代码粘贴到方法中,但计时器总是给我零。我该如何解决?

以下是计时器代码。

public partial class Form1 : Form
{
    //Timer decleration
    DateTime startTime, StopTime;
    TimeSpan stoppedTime;
    bool reset;

    bool startVariabl = true;
    // The rest of the code..

    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        if (startVariable) startMethod();
        //
        //The rest of the code...
    }

    private void startMethod()
    {
        //Timer
        tmDisplay.Enabled = true;

        // Reset display to zero
        reset = true;
        lblElapsed.Text = "00:00.00.0";

        // Start timer and get starting time
        if (reset)
        {
            reset = false;
            startTime = DateTime.Now;
            stoppedTime = new TimeSpan(0);
        }
        else
        {
            stoppedTime += DateTime.Now - StopTime;
        }
    }

    private void tmDisplay_Tick(object sender, EventArgs e)
    {
        DateTime currentTime;

        //Determine Ellapsed Time
        currentTime = DateTime.Now;

        // Display Time
        lblElapsed.Text = HMS(currentTime - startTime - stoppedTime);
    }

    private string HMS(TimeSpan tms)
    {
        //Format time as string; leaving off last six decimal places.
        string s = tms.ToString();
        return (s.Substring(0, s.Length - 6));
    }

我是新的C#学习者。

1 个答案:

答案 0 :(得分:0)

正如keyboardP在评论中建议的那样,你应该添加这一行:

tmDisplay.Tick += new EventHandler(tmDisplay_Tick);

通常Tick处理程序设置一次(除非您需要将其切换到其他回调或由于某种原因使其无效)所以我会在Form构造函数中添加它,假设已经创建了计时器,或者在计时器初始化之后,如果你这样做用某种方法。