C# 从N秒、分钟、小时开始启动Dispatchermer

C# 从N秒、分钟、小时开始启动Dispatchermer,c#,dispatchertimer,C#,Dispatchertimer,我一直在搜索信息,但找不到任何信息。我的问题是如何从N秒、分钟或小时开始启动Dispatchermer。我的意思是,当前它从00:00:00开始(也显示在CurrentTime标签中),但是如果我想从00:00:30开始(也显示在CurrentTime标签中),应该有什么不同 为了进一步澄清。。。启动应用程序时,我执行startWorkingTimeToDayTime()。然后我有一个标签(CurrentTime),它开始显示应用程序运行时的时间。目前从00:00:00开始。我想在开始时显示例如

我一直在搜索信息,但找不到任何信息。我的问题是如何从N秒、分钟或小时开始启动Dispatchermer。我的意思是,当前它从00:00:00开始(也显示在CurrentTime标签中),但是如果我想从00:00:30开始(也显示在CurrentTime标签中),应该有什么不同

为了进一步澄清。。。启动应用程序时,我执行
startWorkingTimeToDayTime()
。然后我有一个标签(
CurrentTime
),它开始显示应用程序运行时的时间。目前从00:00:00开始。我想在开始时显示例如00:00:30,然后按现在的状态打勾1秒。。。所以00:00:30->00:00:31->00:00:32->00:00:33->00:00:34->

我试着玩:

DateTime x30SecsLater = StartTimeWholeDay.AddSeconds(30);
没有成功

当前代码:

private static DateTime StartTimeWholeDay;
private DispatcherTimer _dailyTimer;

public void StartWorkingTimeTodayTimer()
{
    StartTimeWholeDay = DateTime.Now;
    DateTime x30SecsLater = StartTimeWholeDay.AddSeconds(30);

    _dailyTimer = new DispatcherTimer(DispatcherPriority.Render);
    _dailyTimer.Interval = TimeSpan.FromSeconds(1);
    _dailyTimer.Tick += (sender, args) =>
    {
        CurrentTime = (DateTime.Now - StartTimeWholeDay).ToString(@"hh\:mm\:ss"); // DateTime.Now.ToLongTimeString()
    };
    _dailyTimer.Start();
} 

编辑:

我已经试过了:

public void StartWorkingTimeTodayTimer()
{
    StartTimeWholeDay = DateTime.Now;
    DateTime x30SecsLater = StartTimeWholeDay.AddSeconds(30);

    _dailyTimer = new DispatcherTimer(DispatcherPriority.Render);
    _dailyTimer.Interval = TimeSpan.FromSeconds(1);
    _dailyTimer.Tick += (sender, args) =>
    {
        CurrentTime = (DateTime.Now - x30SecsLater).ToString(@"hh\:mm\:ss"); // DateTime.Now.ToLongTimeString()
    };
    _dailyTimer.Start();
}
但它是逆向计算的


它应该走另一条路00:00:30->00:00:31->00:00:32->00:00:33->00:00:34->

在经过长时间的努力之后,让WPF在控制台上运行(在.NET 5中)…我失败了,所以我将使用System.Timers给出答案。但你明白了

使用系统;
使用系统计时器;
名称空间TimerExample
{
班级计划
{
私有静态日期时间_startTime;
私有静态void OnTimedEvent(对象源,ElapsedEventArgs eea)
{
Console.WriteLine((eea.SignalTime-\u startTime)
.Add(TimeSpan.FromSeconds(29))//29,因为第一个触发器发生在启动后1秒
.ToString(@“hh\:mm\:ss”);
}
静态void Main(字符串[]参数)
{
_startTime=DateTime.Now;
var定时器=新定时器
{
间隔=1000,//毫秒
自动重置=真,
};
timer.appeased+=OnTimedEvent;
timer.Start();
Console.WriteLine(“按任意键停止”);
Console.ReadKey();
}
}
}

using System;
using System.Timers;

namespace TimerExample
{
    class Program
    {
        private static DateTime _startTime;

        private static void OnTimedEvent(object source, ElapsedEventArgs eea)
        {
            Console.WriteLine((eea.SignalTime - _startTime)
                .ToString(@"hh\:mm\:ss"));
        }

        static void Main(string[] args)
        {
            _startTime = DateTime.Now.AddSeconds(-29); // again 29 instead of 30
            var timer = new Timer
            {
                Interval = 1000, // msec
                AutoReset = true,
            };
            timer.Elapsed += OnTimedEvent;
            timer.Start();

            Console.WriteLine("Press any key to stop");
            Console.ReadKey();
        }
    }
}

在计时器启动之前使用
任务。延迟
如何?我想了很久,但问题还不完全清楚:您真的希望计时器以30秒的延迟启动,还是希望
CurrentTime
具有30秒的偏移量?我不想以延迟开始。我只想从某个时间开始数数。不是从现在的零开始(00:00:00),而是从(00:00:30或00:03:00或03:00:50)开始。不是说计时器应该在某个时间等待或启动,只是能够指定从何处开始计数的时间(数字)。这应该很简单,但我不知道怎么做。看来你已经走了一半了。。。为什么不试试
CurrentTime=(DateTime.Now-x30SecsLater)。
。。。这将在“-30秒”开始。。。给出一个提示。请看我编辑的问题谢谢!减去工作
DateTime x30SecsLater=starttimewwholeday.AddSeconds(-30)@hatman在这种情况下,您可能应该更改变量的名称;)