【问题标题】:how the label be updated time to time标签如何不时更新
【发布时间】:2018-09-17 08:10:32
【问题描述】:

我捕获了启动时间和当前时间,但我的问题是如果启动时间已经过去,标签不会改变。我需要重新打开我的 windows 窗体 (c#) 以便标签会改变。

代码:

_hh = DateTime.Now.Hour;
_min = DateTime.Now.Minute;
_yy = DateTime.Now.Year;
_mm = DateTime.Now.Month;            
_dd = DateTime.Now.Day;

DateTime _original_launch_time = new DateTime(_yy, _mm, _dd, 13, 0, 0);//this is the default time for launch
DateTime time = new DateTime(_yy, _mm, _dd, _hh, _min, 0); //this gets the current time

if (_original_launch_time > time)
{
    label1.Text = "your not late";
}
else
{
    label1.Text = "your late";
}

【问题讨论】:

  • 您是否在更新面板中获取了标签?
  • 正如您目前所拥有的那样,如果当前时间在执行代码时的 1300 之前,您的代码会将 label1.Text 设置为“您未迟到”...您能澄清一下您到底想要什么吗?做不同的事?如果需要在 1300 之后自动更新,例如需要把这段代码放在一个定时器滴答事件中。
  • 在哪里可以找到更新面板?

标签: c# .net datetime label timespan


【解决方案1】:

创建一个计时器以在某个时间间隔内执行您的代码,并调用您的代码以在主线程执行以正确更新表单,因为计时器在后台线程上运行。

using System.Windows.Forms;

Timer t = new Timer();
t.Interval = 1000;
t.Tick += new EventHandler(timer_Tick);
t.Start();

void timer_Tick(object sender, EventArgs e)
{
      Invoke((MethodInvoker)(() => {

          // your code here

      }));
}

关闭表单时不要忘记调用t.Stop();,就像你没有这样做一样,它会一直运行直到你关闭整个应用程序。

【讨论】:

  • 定时器 t = new Timer(); t.间隔 = 1000; t.Tick += new EventHandler(timer_Tick); t.Start();
  • 注意System.Windows.Forms.Timer,没有必要在Tick事件中调用回GUI线程,它已经处理了。也没有必要在表单关闭时显式停止计时器,如果没有在其他地方引用,它将被处理掉并且无论如何都会发生。
  • 所以你的意思是我会使用invoker方法?
  • @mat 您可以将代码放在表单加载事件中。 @steve16351 我认为您有一个很好的观点,即不要使用表单计时器调用该方法,因为在 UI 线程上引发了计时器事件,但他仍然应该停止计时器并在关闭表单 stackoverflow.com/questions/7951821/… 时取消订阅 Tick 事件.
猜你喜欢
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 2016-08-05
相关资源
最近更新 更多