[英]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.