You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

游戏引擎开发:未注释特定代码时应用窗口无法启动求助

问题根源

你的代码卡死窗口的核心原因是:CallUpdate里的while循环阻塞了UI主线程。

OnLoad是窗口启动过程中由UI主线程执行的关键方法,主线程需要完成窗口初始化、绘制、消息响应等核心工作才能让窗口正常显示。而你在OnLoad里直接调用CallUpdate后,while (stopwatch.IsRunning)循环会一直霸占主线程——只要stopwatch处于运行状态,循环就会持续执行,主线程根本没机会处理窗口显示的逻辑,自然窗口弹不出来。

另外,你的CallUpdate循环还存在空转问题,即使还没到120ms,循环也会一直跑,进一步加剧了主线程的阻塞。

解决方案

下面提供两种常用的修复方案,核心都是避免阻塞UI主线程:

方案1:使用独立线程执行更新逻辑

把更新逻辑放到后台线程中,让UI主线程能正常处理窗口初始化:

修改OnLoad方法:

protected override void OnLoad(EventArgs e)
{
    GameTime.stopwatch.Start();
    if (GameTime.stopwatch.IsRunning)
    {
        // 启动后台线程执行更新逻辑,不阻塞主线程
        Thread updateThread = new Thread(GameTime.CallUpdate);
        updateThread.IsBackground = true; // 设置为后台线程,程序退出时自动终止
        updateThread.Start();
    }
    base.OnLoad(e);
}

同时优化CallUpdate,添加短暂睡眠减少CPU空转:

public static void CallUpdate()
{
    Debug.Write("I am here");
    while (stopwatch.IsRunning)
    {
        if (stopwatch.ElapsedMilliseconds > 120)
        {
            timeSinceUpdate = (int)stopwatch.ElapsedMilliseconds;
            Debug.Write("Updated");
            // 执行你的更新逻辑
            stopwatch.Restart();
        }
        // 短暂睡眠,避免线程空转占用过多CPU
        Thread.Sleep(1);
    }
}

方案2:使用定时器替代死循环

游戏引擎或UI程序更常用的是定时器机制,比如WinForms的Timer,它会在主线程的消息循环中触发,不会阻塞窗口初始化:

private Timer _updateTimer;

protected override void OnLoad(EventArgs e)
{
    // 先执行基础窗口初始化,确保窗口能正常显示
    base.OnLoad(e);

    _updateTimer = new Timer();
    _updateTimer.Interval = 120; // 设置更新间隔为120ms
    _updateTimer.Tick += (sender, args) =>
    {
        timeSinceUpdate = 120; // 或者用实际的 elapsed 时间,比如用Stopwatch记录
        Debug.Write("Updated");
        // 执行你的更新逻辑
    };
    _updateTimer.Start();
}

// 窗口关闭时清理定时器
protected override void OnClosed(EventArgs e)
{
    _updateTimer?.Stop();
    _updateTimer?.Dispose();
    base.OnClosed(e);
}
关键提醒

永远不要在UI主线程的初始化方法(比如OnLoad、Form_Load)中执行无限循环或长时间阻塞的代码——主线程一旦被占用,窗口就无法完成创建和显示,甚至会出现程序无响应的情况。游戏的更新、渲染逻辑通常都需要放到独立线程或引擎自带的循环机制中执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:17:30