在Electron中创build多个不同参数的不可见窗口

描述

我正尝试使用隐形窗口作为电子中的任务/线程。 首先我在主进程的for循环中创build一些不可见的窗口。 每个窗口发送一个事件dom-is-ready回来。 只要在主进程中接收到这个数据,带有参数(path)的事件就会返回到窗口,然后窗口创build一个数组并将该数组发送回主进程。

主stream程

 for(let i = 0; i < paths.length; i++){ invPfWins[i] = new BrowserWindow({ width: 400, height: 400, show: false }); invPfWins[i].loadURL(invisPath); invPfWins[i].webContents.on('did-finish-load', function () { invPfWins[i].show(); }); invPfWins[i].webContents.openDevTools(); } let i = 0; ipcMain.on('dom-is-ready', function (event) { invPfWins[i].webContents.send('start-read-files', paths[i], i++); }); ipcMain.on('files-read-done', function (event, output, id) { console.log(output); pfLists[id] = output; }); 
  • paths是将被发送到不可见窗口的path数组
  • invPfWins存储创build的不可见窗口

隐形窗口

 ipc.on('start-read-files', function (event, ppath, id) { console.log("start signal received"); let retVal = readFiles(ppath); ipc.send('files-read-done', retVal, id) window.close() }); ipc.send('dom-is-ready'); console.log("dom-is-ready sent"); 

行为

该程序不会创build一个错误,但大部分时间,一些不可见的(不可见的)窗口不会终止,也不会发送结果。 所有不可见的窗口发送dom-is-ready事件,但那些不终止的事件不会收到start-read-files事件。 我认为这是因为竞争条件,我在for循环中创build窗口后,可能发生的事情是窗口不会按照创build的顺序发送dom-is-ready事件。我也试图把在for循环中侦听dom-is-ready事件的代码,然后出现以下错误:

 Uncaught Exception: Error: Object has been destroyed at Error (native) at EventEmitter.<anonymous> 

我的猜测是这种竞争状态是正确的问题吗? 我该如何解决这个问题? 我也觉得这不是一个好的方法,Electron是否有更好的方法来产生像这样的任务/线程(我也尝试过networking工作者,但是node.js模块在那里没有工作)?