Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计时器不是从00:00开始的_C#_Time_Save - Fatal编程技术网

C# 计时器不是从00:00开始的

C# 计时器不是从00:00开始的,c#,time,save,C#,Time,Save,我有一个游戏,里面有一个计时器。每过两分钟,不同玩家之间的新一轮比赛开始。所以,我有一个文本框,从00:00开始,每秒钟都会改变,直到它等于02:00 现在,如果用户关闭表单,我想把游戏的状态保存在一个回合中间。我需要做的是,加载时,文本框从用户上次离开游戏时开始,正常情况下一直持续到02:00 我该怎么做 这就是我现在所拥有的比赛形式 public Tournament() { _timer = new System.Windows.Forms.Timer(); _time

我有一个游戏,里面有一个计时器。每过两分钟,不同玩家之间的新一轮比赛开始。所以,我有一个文本框,从00:00开始,每秒钟都会改变,直到它等于02:00

现在,如果用户关闭表单,我想把游戏的状态保存在一个回合中间。我需要做的是,加载时,文本框从用户上次离开游戏时开始,正常情况下一直持续到02:00

我该怎么做

这就是我现在所拥有的比赛形式

public Tournament()
{
     _timer = new System.Windows.Forms.Timer();
     _timer.Interval = 1000;
     _timer.Tick += Timer_Tick;
     _myDateTime = DateTime.Now;
     newDate = new DateTime();
     newDate = newDate.AddMinutes(2.00);
     _timer.Start();
     InitializeComponent();
}

void Timer_Tick(object sender, EventArgs e)
{
     var diff = DateTime.Now.Subtract(_myDateTime);
     this.textBox1.Text = diff.ToString(@"mm\:ss");

     DateTime dt = Convert.ToDateTime(diff.ToString());

     if (newDate.Minute == dt.Minute)
     {
         _timer.Stop();
         _myDateTime = DateTime.Now;

         displayPointsOrResults();

         this.textBox1.Text = diff.ToString(@"mm\:ss");  
     }
   }
在我的LoadGame方法中:where timePassed是我在文本框中写的内容

  string[] splitted6 = timePassed.Split(':');

  if (splitted6[0] == "00")
  {
      int remainingTime = 120 - Convert.ToInt32(splitted6[1]);

      DateTime time = DateTime.Now.Date; 
      time = time.AddMinutes(remainingTime);

      _myDateTime = time;
  }
  else
  {
      int leftTime = Convert.ToInt32(splitted[0].Trim('0') + splitted[1]);
      int remainingTime = 120 - leftTime;

      DateTime time = DateTime.Now.Date; 
      time = time.AddMinutes(remainingTime);

      _myDateTime = time;
  } 

使用
TimeSpan
而不是
DateTime
保存和加载当前超时:

int _roundDuration = 2 * 60; // 2 minutes

void Timer_Tick(object sender, EventArgs e)
{
     TimeSpan diff = DateTime.Now - _myDateTime;
     textBox1.Text = diff.ToString(@"mm\:ss");
     if (diff.TotalSeconds >= _roundDuration)
     {
          _timer.Stop();    
          _myDateTime = DateTime.Now;
          displayPointsOrResults();
     }
}
加载游戏时(解析
textBox1.Text
):


无论何时加载游戏,开始时间都将按照超时前显示的开始时间进行计算。

使用
TimeSpan
而不是
DateTime
保存和加载当前超时:

int _roundDuration = 2 * 60; // 2 minutes

void Timer_Tick(object sender, EventArgs e)
{
     TimeSpan diff = DateTime.Now - _myDateTime;
     textBox1.Text = diff.ToString(@"mm\:ss");
     if (diff.TotalSeconds >= _roundDuration)
     {
          _timer.Stop();    
          _myDateTime = DateTime.Now;
          displayPointsOrResults();
     }
}
加载游戏时(解析
textBox1.Text
):


无论何时加载游戏,开始时间都将按照超时前显示的开始时间进行计算。

到目前为止,您的操作过于复杂了!不要将值保存为字符串(例如标签的
文本
)或解析任何“字符串化”值

相反,使用后台计数器(例如,计算秒数),该计数器因显示原因而格式化:

int _seconds = 0;
const int _roundDuration = 120; // 2 minutes

...

void Timer_Tick(object sender, EventArgs e)
{
    if (_seconds++ >= _roundDuration)
    {
        _seconds = 0;
        displayPointsOrResults();
    }
    textBox1.Text = (_seconds / 60).ToString("D2") + ":" + (_seconds % 60).ToString("D2");
}

你把这件事搞得太复杂了!不要将值保存为字符串(例如标签的
文本
)或解析任何“字符串化”值

相反,使用后台计数器(例如,计算秒数),该计数器因显示原因而格式化:

int _seconds = 0;
const int _roundDuration = 120; // 2 minutes

...

void Timer_Tick(object sender, EventArgs e)
{
    if (_seconds++ >= _roundDuration)
    {
        _seconds = 0;
        displayPointsOrResults();
    }
    textBox1.Text = (_seconds / 60).ToString("D2") + ":" + (_seconds % 60).ToString("D2");
}

我用过这个谢谢!但是当我将字符串解析为TimeSpan时,例如,如果我有00:33。。从时间跨度来看,现在是33:00。。不知道为什么@学生程序员oops,你需要提供解析格式,等一下,我会更新答案我用过这个谢谢!但是当我将字符串解析为TimeSpan时,例如,如果我有00:33。。从时间跨度来看,现在是33:00。。不知道为什么@学生程序员oops,你们需要提供解析的格式,稍等,我会更新答案