【问题标题】:Start countdown at a specific time and show it in a label在特定时间开始倒计时并将其显示在标签中
【发布时间】:2021-11-25 08:57:00
【问题描述】:

我有这个每分钟都在进行的活动。

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'从创建它的线程以外的线程访问”

我怎样才能做到这一点?

【问题讨论】:

标签: c# winforms


【解决方案1】:

您不能从另一个线程修改您的 GUI 元素。为此,您需要指示调度员在其线程上执行这行代码label1.Text = ts.ToString();

就是这样完成的

label1.BeginInvoke((MethodInvoker)delegate ()
            {
                label1.Text = ts.ToString();
            });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-19
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多