C# 从N秒、分钟、小时开始启动Dispatchermer
我一直在搜索信息,但找不到任何信息。我的问题是如何从N秒、分钟或小时开始启动Dispatchermer。我的意思是,当前它从00:00:00开始(也显示在CurrentTime标签中),但是如果我想从00:00:30开始(也显示在CurrentTime标签中),应该有什么不同 为了进一步澄清。。。启动应用程序时,我执行C# 从N秒、分钟、小时开始启动Dispatchermer,c#,dispatchertimer,C#,Dispatchertimer,我一直在搜索信息,但找不到任何信息。我的问题是如何从N秒、分钟或小时开始启动Dispatchermer。我的意思是,当前它从00:00:00开始(也显示在CurrentTime标签中),但是如果我想从00:00:30开始(也显示在CurrentTime标签中),应该有什么不同 为了进一步澄清。。。启动应用程序时,我执行startWorkingTimeToDayTime()。然后我有一个标签(CurrentTime),它开始显示应用程序运行时的时间。目前从00:00:00开始。我想在开始时显示例如
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在这种情况下,您可能应该更改变量的名称;)