You need to enable JavaScript to run this app. 如何在Windows Forms中从另一个窗体恢复游戏计时器的运行?
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows Forms中从另一个窗体恢复游戏计时器的运行?

解决方案

方案1:使用模态对话框实现(改动最小,推荐)

暂停状态下不需要操作游戏主窗体,直接用模态弹窗阻塞主流程,等待暂停窗口操作完成后直接在主窗体后续逻辑重启计时器即可,改法如下:

  • 修改游戏主窗体Paused方法代码:
private void Paused()
{
    gameTimer.Stop();
    PausedScreen pausedWindow = new PausedScreen();
    // ShowDialog会阻塞当前线程,直到暂停窗口关闭才会执行后续代码
    pausedWindow.ShowDialog();
    // 暂停窗口关闭后直接重启计时器
    gameTimer.Start();
    isPaused = false;
}
  • 修改暂停界面窗体UnPause方法代码:
private void UnPause(object sender, EventArgs e)
{
    // 关闭当前暂停窗口,触发主窗体后续逻辑
    this.Close();
}

private void QuitGame(object sender, EventArgs e)
{
    Application.Exit();
}

方案2:传递主窗体引用(适用于需要非模态暂停窗的场景)

如果你需要暂停窗弹出时仍可操作主窗体,可以把主窗体实例传递给暂停窗,直接调用主窗体的计时器启动逻辑:

  1. 首先给暂停窗体新增带主窗体参数的构造函数,注意将代码中GameForm替换为你实际的游戏主窗体类名:
// 存储主窗体实例
private GameForm _mainGameForm;

public PausedScreen(GameForm mainForm)
{
    InitializeComponent();
    _mainGameForm = mainForm;
}

private void UnPause(object sender, EventArgs e)
{
    Hide();
    // 调用主窗体的游戏恢复逻辑
    _mainGameForm.ResumeGame();
}

private void QuitGame(object sender, EventArgs e)
{
    Application.Exit();
}
  1. 在游戏主窗体新增公有恢复方法,同时修改Paused方法传参:
// 主窗体新增公有恢复方法,符合封装规范不需要暴露计时器控件
public void ResumeGame()
{
    gameTimer.Start();
}

private void Paused()
{
    gameTimer.Stop();
    // 把当前主窗体实例传递给暂停窗
    PausedScreen pausedWindow = new PausedScreen(this);
    pausedWindow.Show();
    isPaused = false;
}

内容的提问来源于stack exchange,提问作者ineedhelp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 12:57:02