【问题标题】:Execute something only when some time has been elapsed仅在经过一段时间后才执行某事
【发布时间】:2013-04-14 01:29:57
【问题描述】:

这对我来说有点难以解释,但请看:

我做了一个MMORPG服务器启动器,它有一个开始按钮,当你点击它时会弹出一个小窗口,要求你为服务器投票,然后你可以再次点击开始启动游戏(有10秒倒计时在你真正开始游戏之前)

唯一的问题是投票网站每 12 小时只接受一个用户的投票(基于 IP 和 cookie),并且在有人投票一次之后,每次你都会弹出那个小窗口并等待,这有点烦人想开始游戏。

我的想法是: 当有人点击打开投票窗口时,他的系统的日期和确切的时间将被写入文件。

之后,每次您单击“开始”时,启动器都会读取该日期和时间,并计算自您上次投票后是否已过 12 小时,如果是,它会再次要求您投票,如果不是,它会跳过那个部分并直接开始游戏。

我不是很有经验,我不知道从哪里开始以及如何完成这项工作,非常感谢您的帮助。

谢谢!

如果有帮助,这是我的活动。

    private void btnStart_Click(object sender, EventArgs e)
    {
        var voteForm = new VoteWindow();
        voteForm.Show();
        voteForm.BringToFront();
        this.Enabled = false;
    }

这是我实际开始游戏的代码。

    private void btnStart2_Click(object sender, EventArgs e)
    {
        string error1 = "Deleted because it was too long...";
        string title1 = "Deleted because it was too long...";

        if (File.Exists("engine.exe"))
        {
            Process.Start("engine.exe", "/load /config debug");
            Application.Exit();
        }
        else
        {
            MessageBox.Show(error1, title1, MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

【问题讨论】:

  • 在不相关的注释上,为什么要这样做:voteForm.Show(); voteForm.BringToFront(); this.Enabled = false; ??为什么不改用 ShowDialog() 呢?
  • 我没有使用 ShowDialog 因为我已经尝试过并且遇到了一些问题,我现在使用的那个完美地完成了相同的任务,BringToFront 是为了确保它位于主窗体的顶部.也禁用是在投票打开时禁用和冻结主窗体

标签: c# events time timer vote


【解决方案1】:

只需使用Properties.Settings。您可以通过转到 Solution Explorer 然后展开 Properties 并打开 Settings.Settings 来创建新设置。在此页面上,您可以创建一个新的 System.DateTime 对象。然后你会做这样的事情。

private void btnStart_Click(object sender, EventArgs e)
{
    TimeSpan ts = DateTime.Now - Properties.Settings.Default.MySetting;

    if (ts.TotalHours > 12)
    {
        Properties.Settings.Default.MySetting = DateTime.Now;
        Properties.Settings.Default.Save();

        var voteForm = new VoteWindow();
        voteForm.Show();
        voteForm.BringToFront();
        this.Enabled = false;
    }
}

【讨论】:

  • 这太好了,谢谢!我通过添加 else {} 来定制它,如果 12 小时还没有过去(在我的情况下开始游戏)会发生的动作
  • 没问题。如果答案有帮助,那么您应该接受并投票。