在特定时间开始倒计时并在标签中显示
Start countdown at a specific time and show it in a label
我有这个事件,每分钟 运行。
void checkForTime_Elapsed(object sender, ElapsedEventArgs e)
{
if (DateTime.Now.Hour == 10 && DateTime.Now.Minute == 35)
{
tik_tak();
}
}
并且在特定时间,在我的例子中10:35我想在标签中显示倒数计时器(我已经有了)
private void tik_tak()
{
EndOfTime = DateTime.Now.AddMinutes(10);
System.Windows.Forms.Timer t = new System.Windows.Forms.Timer() { Interval = 500, Enabled = true };
t.Tick += new EventHandler(t_Tick);
t_Tick(null, null);
}
void t_Tick(object sender, EventArgs e)
{
TimeSpan ts = EndOfTime.Subtract(DateTime.Now);
label1.Text = ts.ToString();
}
现在我收到“跨线程操作无效:控制 'label1' 从创建它的线程以外的线程访问”
我怎样才能做到这一点?
您不能从另一个线程修改您的 GUI 元素。为此,您需要指示您的调度程序在其线程上执行这行代码 label1.Text = ts.ToString();
。
这样就完成了
label1.BeginInvoke((MethodInvoker)delegate ()
{
label1.Text = ts.ToString();
});
我有这个事件,每分钟 运行。
void checkForTime_Elapsed(object sender, ElapsedEventArgs e)
{
if (DateTime.Now.Hour == 10 && DateTime.Now.Minute == 35)
{
tik_tak();
}
}
并且在特定时间,在我的例子中10:35我想在标签中显示倒数计时器(我已经有了)
private void tik_tak()
{
EndOfTime = DateTime.Now.AddMinutes(10);
System.Windows.Forms.Timer t = new System.Windows.Forms.Timer() { Interval = 500, Enabled = true };
t.Tick += new EventHandler(t_Tick);
t_Tick(null, null);
}
void t_Tick(object sender, EventArgs e)
{
TimeSpan ts = EndOfTime.Subtract(DateTime.Now);
label1.Text = ts.ToString();
}
现在我收到“跨线程操作无效:控制 'label1' 从创建它的线程以外的线程访问”
我怎样才能做到这一点?
您不能从另一个线程修改您的 GUI 元素。为此,您需要指示您的调度程序在其线程上执行这行代码 label1.Text = ts.ToString();
。
这样就完成了
label1.BeginInvoke((MethodInvoker)delegate ()
{
label1.Text = ts.ToString();
});