簡體   English   中英

C#從設備讀取后如何使時鍾運行

[英]C# how to make a clock run after reading from device

我知道,如果要顯示pc時間,我們將使用以下代碼:

   System.Windows.Forms.Timer tmr = null;
    private void StartTimer()
    {
        tmr = new System.Windows.Forms.Timer();
        tmr.Interval = 1000;
        tmr.Tick += new EventHandler(tmr_Tick);
        tmr.Enabled = true;
    }

    void tmr_Tick(object sender, EventArgs e)
    {
        textBox6.Text = DateTime.Now.ToString("dd/MM/yy HH:mm:ss");
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        StartTimer();
    }

但是我不想顯示電腦時間。 我想顯示另一個時間(我的案例中來自微控制器的rtc時間)。

如果我從串口獲取rtc時間,並在文本框中顯示為“ 09:00:00”。 那里是靜態的嗎? 如何使其在文本框中運行/遞增?

我嘗試了下面的代碼,這些代碼是通過上面的代碼修改的:

    System.Windows.Forms.Timer rtc = null;
    private void StartRTC()
    {
        rtc = new System.Windows.Forms.Timer();
        rtc.Interval = 1000;
        rtc.Tick += new EventHandler(rtc_Tick);
        rtc.Enabled = true;
    }
    int i = 1;
    DateTime dt = new DateTime();
    void rtc_Tick(object sender, EventArgs e)
    {
        textBox17.Text = dt.AddSeconds(i).ToString("HH:mm:ss");
        i++;
    }

但是我的文本框中顯示的時間總是從00:00:00開始遞增。

我如何讓它從我的單片機rtc獲得的時間開始遞增?

那是因為您new DateTime() ,所以您正在獲取新的DateTime類的默認值。 您應該使用對微處理器的API調用來初始化DateTime的值。

請注意,因為我對您的微處理器的API一無所知,所以我只能編寫偽代碼。 在第二個示例中,替換以下行...

DateTime dt = new DateTime();

與...

DateTime dt = DateTime.Parse({some microprocessor API call for the RTC value});

根據最新評論進行編輯

System.Windows.Forms.Timer rtc = null; 
DateTime dt;  // NOTE I DON'T INITIALIZE THIS TO ANYTHING AT FIRST

private void StartRTC() 
{ 
    rtc = new System.Windows.Forms.Timer(); 
    rtc.Interval = 1000; 
    rtc.Tick += new EventHandler(rtc_Tick); 
} 

void rtc_Tick(object sender, EventArgs e) 
{ 
    // NOTE I GOT RID OF i - THAT WASN'T GOING TO WORK LIKE THAT 
    // YOU JUST WANT TO ADD ONE SECOND BECAUSE THE TIMER TICKS EVERY SECOND:
    textBox17.Text = dt.AddSeconds(1).ToString("HH:mm:ss");

    dt = DateTime.Parse(textBox17.Text);
}

 // I HAVE NO IDEA WHAT YOUR METHOD HANDLER IS CALLED, THIS IS 
 // JUST FOR THE EXAMPLE
void buttonSetRtc_Click(object sender, EventArgs e)  
{
    // HERE IS YOUR CALL TO THE MICROCONTROLLER FOR THE INITIAL TIME:
    textBox17.Text = {some call to the microcontroller};  
    dt = DateTime.Parse(textBox17.Text);  // NOW THIS LINE WON'T FAIL
    rtc.Enabled = true;  // NOTE I MOVED THIS LINE TO KEEP IT FROM FAILING
}

您必須使用微控制器的datetime初始化Datetime dt。

DateTime dt = new DateTime();
dt = dt.AddHours(9);

我不知道這種方法能發揮多大的作用,但是看看是否可行。

當您能夠從微控制器中獲取時間時,為什么不使用計時器,該計時器會定期從微控制器中讀取時間並在UI中更新控件?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM