在特定时间开始倒计时并在标签中显示

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();
            });