描述
在我的Electron程序中,我将所有可见的渲染器窗口存储在主进程中的单链表中。 创建一个新的时,它会被添加到列表中,但我不知道如何在它们关闭时再次从列表中删除它们(找出要分别删除的列表元素)。
主要流程中的代码
global.windows = new LinkedList();
function createWindow(p_URL, p_width, p_height, p_x, p_y, p_minWidth, p_minHeight, p_parent, p_icon) {
// Create the browser window.
let win;
win = new BrowserWindow({width: p_width, height: p_height, minWidth: p_minWidth, minHeight: p_minHeight, parent: p_parent, icon: p_icon, show: false});
global.windows.insert(win);
if(p_URL !== undefined)
win.loadURL(p_URL)
win.once('ready-to-show', () => {
win.show()
});
console.log("added: size = " + global.windows.getSize());
win.on('closed', () => {
console.log("removeStart: size = " + global.windows.getSize());
// Dereference the window object
let i;
for(i = global.windows.getHeadNode(); i.getData() !== win; i = i.next);
if(i >= global.windows.getSize())
console.log("Error");
else
global.windows.removeAt(i);
console.log("i: " + i);
console.log("removeEnd: size = " + global.windows.getSize());
win = null;
});
return win;
}
问题
我尝试通过遍历列表来执行此操作,直到找到要删除的元素然后将其删除。当我现在执行程序然后关闭其中一个窗口时,我收到以下错误。
Uncaught Exception:
Error: Object has been destroyed
at Error (native)
由if(i >= global.windows.getSize())
上的eventlistener中的行closed
引起。该行之前的日志命令会产生输出,但是后面的日志命令不会执行任何操作。没有元素从列表中删除。
我究竟做错了什么?是否有更好的方法来管理窗口?