DateTime newDate = new DateTime(2013, 1, 1);
void AddTime()
{
timer1.Interval = 600000;
timer1.Enabled = true;
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Start();
}
void timer1_Tick(object sender, EventArgs e)
{
newDate = newDate.AddMonths(+3);
lblDate.Text = newDate.ToString();
}
出于某种原因,更改timer1.Interval
不会改变添加到newDate
的3个月的速度,它始终是不变的。我想让1分钟的现实生活时间等于3个月。
我正在使用C#。
答案 0 :(得分:1)
您的初始计时器间隔有点大。以下是完整的样本申请。按预期工作
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
DateTime newDate = new DateTime(2013, 1, 1);
public Form1()
{
InitializeComponent();
AddTime(); // call the method, otherwise timer will not start
}
void AddTime()
{
timer1.Interval = 60000; // every minute (1 minute = 60000 milliseconds)
timer1.Enabled = true;
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Start();
}
void timer1_Tick(object sender, EventArgs e)
{
newDate = newDate.AddMonths(3);
label1.Text = newDate.ToString();
}
// if you need to set timet interval after timer start, do as below
private void button1_Click(object sender, EventArgs e)
{
timer1.Stop();
timer1.Interval = 30000; // set interval 30 seconds
timer1.Start();
}
}
}
答案 1 :(得分:0)
确保值.Interval是您想要的值。 你有600 000 600秒或10分钟。 你有足够的时间来举办活动吗? 调试它并进行破坏。
答案 2 :(得分:0)
你的间隔目前太高了,它是600秒而不是60:
DateTime newDate = new DateTime(2013, 1, 1);
void AddTime()
{
timer1.Interval = 60000; // was 600 seconds, now 60
timer1.Enabled = true;
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Start();
}
void timer1_Tick(object sender, EventArgs e)
{
newDate = newDate.AddMonths(3); // + sign shouldn't be here
lblDate.Text = newDate.ToString();
}
修改强>: 现在我看到你现在没有调用AddTime(),并且不清楚它在哪里做。没有更多信息很难说,但如果你使用Winforms,你可以使用表单的加载事件。或者如果它是一个类,你可以使用构造函数来调用它。
基本上是初始化您正在使用的对象的方法。
答案 3 :(得分:0)
你的方式错了。首先将“游戏时间”的 RATIO 计算为“正常时间”。然而,几个月是有问题的,因为一个月中的天数是可变的。相反,我们可以使用四分之一(365/4)并从那里开始工作。使用秒表跟踪已经过了多长时间,并将其添加到参考日期以获得“实时”。那么,“游戏时间”就是经过的时间乘以比率,然后加到参考时间。使用此模型,Timer Interval() IRREVELANT ;我们可以每分钟更新一次,每秒一次,或每秒四次,并且确定真实/游戏时间的代码完全相同......当我们更新显示时,所有时间都保持准确:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// update once per second, but the rate here is IRREVELANT...
// ...and can be changed without affecting the real/game timing
timer1.Interval = 1000;
timer1.Tick += new EventHandler(timer1_Tick);
}
private DateTime dtReal;
private DateTime dtGame;
private DateTime dtReference;
private System.Diagnostics.Stopwatch SW = new System.Diagnostics.Stopwatch();
private double TimeRatio = (TimeSpan.FromDays(365).TotalMilliseconds / 4.0) / TimeSpan.FromMinutes(1).TotalMilliseconds;
private void button1_Click(object sender, EventArgs e)
{
StartTime();
}
private void StartTime()
{
dtReference = new DateTime(2013, 1, 1);
SW.Restart();
timer1.Start();
}
void timer1_Tick(object sender, EventArgs e)
{
UpdateTimes();
DisplayTimes();
}
private void UpdateTimes()
{
double elapsed = (double)SW.ElapsedMilliseconds;
dtReal = dtReference.AddMilliseconds(elapsed);
dtGame = dtReference.AddMilliseconds(elapsed * TimeRatio);
}
private void DisplayTimes()
{
lblReference.Text = dtReference.ToString();
lblReal.Text = dtReal.ToString();
lblGame.Text = dtGame.ToString();
}
}
编辑:添加了屏幕截图...
一分钟后=约3个月
在四分钟后=大约1年