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

Electron父进程打开多个子窗口时崩溃问题求助

Electron父进程打开3+子窗口后崩溃的解决办法

问题原因

你使用ipcRenderer.sendSync发起同步IPC调用创建窗口,但主进程的ipcMain处理函数没有返回任何响应。同步IPC调用会阻塞渲染进程,且Electron默认限制了同步IPC的并发数(通常为3个),当积压的未响应同步请求达到上限时,主进程就会挂起崩溃。

解决方案

1. 改用异步IPC调用(推荐)

打开窗口不需要同步等待结果,用ipcRenderer.send替代sendSync,不会阻塞进程,也不会占用同步IPC队列:

渲染进程代码修改:

var openClient = (id) =>{
    ipcRenderer.send('openNewWindow', {
        html: "./elements/components/equipo.html",
        query: { id : id }
    })
}

主进程代码可保持不变,若需要通知渲染进程窗口创建状态,可添加回复逻辑:

ipcMain.on('openNewWindow', function(event, arg) {
    const windowEEE = new BrowserWindow({
        center: true,
        width: 1024,
        height: 720,
        minWidth: 1024,
        minHeight: 720,
        icon: __dirname + '/resources/iconos/support.png',
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false,
            enableRemoteModule: true
        }
    })
    windowEEE.loadFile(arg.html, {query: arg.query})
    // 可选:回复渲染进程窗口创建成功
    event.reply('openNewWindow-reply', { success: true })
});

渲染进程监听回复:

ipcRenderer.on('openNewWindow-reply', (event, result) => {
    console.log('窗口创建完成:', result)
})

2. 若必须用同步调用,需返回响应

如果业务场景确实需要同步获取结果,必须在主进程处理函数中调用event.returnValue返回响应,避免IPC队列积压:

主进程代码修改:

ipcMain.on('openNewWindow', function(event, arg) {
    const windowEEE = new BrowserWindow({
        // 配置保持不变
    })
    windowEEE.loadFile(arg.html, {query: arg.query})
    // 返回同步响应,释放IPC阻塞
    event.returnValue = { success: true }
});

额外优化:避免内存泄漏

主进程中windowEEE是全局变量,每次创建会覆盖之前的窗口引用,可能导致内存泄漏。建议用数组保存所有子窗口引用,窗口关闭时移除:

const childWindows = [];

ipcMain.on('openNewWindow', function(event, arg) {
    const windowEEE = new BrowserWindow({
        // 配置保持不变
    })
    childWindows.push(windowEEE);
    // 窗口关闭时清理引用
    windowEEE.on('closed', () => {
        const idx = childWindows.indexOf(windowEEE);
        if (idx !== -1) childWindows.splice(idx, 1);
    })
    windowEEE.loadFile(arg.html, {query: arg.query})
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:10:32