最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

当我隐藏mainWindow时,mainWindow.on('close')被调用多次

IT培训 admin 8浏览 0评论

当我隐藏mainWindow时,mainWindow.on('close')被调用多次

我做了一个基本的电子托盘,当点击其中一个选项时打开一个窗口。我检查是否用bool打开BrowserWindow并创建或显示/隐藏窗口。

const contextMenu = Menu.buildFromTemplate([
      { label: 'Open configuration menu', click:() => {
        console.log("called createwin");
        createwin();
      }

而createwin是:

function createwin(){
  if (windowshown == false) {
  mainWindow = new BrowserWindow({
    width: 1000,
    height: 800,
    webPreferences: {
      nodeIntegration: true
    }
  })
  console.log("Window has been created")
  windowshown = true;
mainWindow.loadFile('configuration.html')
}
else {
  mainWindow.show(); 
  console.log("Window has been shown");
} 
  mainWindow.on('close', (event) => {
        event.preventDefault();
        console.log("Window has been hidden");
        mainWindow.hide();
    })
}

当我隐藏/显示它创建的窗口4次时,我的控制台看起来像这样:


called createwin
Window has been created
window has been hidden
called createwin
Window has been shown
window has been hidden
window has been hidden
called createwin
Window has been shown
window has been hidden
window has been hidden
window has been hidden
called createwin
window has been hidden
window has been hidden
window has been hidden
window has been hidden

在第四次之后,它只是停止响应。我甚至做不到

      mainWindow.removeAllListeners('close');
      mainWindow.close()
      mainWindow = null
      app.quit();

我的问题是我的应用程序在第四次隐藏窗口后完全没有响应。

更新:如果我从npm start而不是visual studio代码的调试器开始,隐藏窗口后应用程序将完全无响应。

我在这里错过了什么?

回答如下:

无论何时调用close,都会向createwin事件添加一个新的事件监听器。然后在窗口关闭时运行每个事件处理程序,从而产生重复的window has been hidden

在创建新窗口时,您只需要添加一次事件处理程序:

function createwin(){
    if (windowshown == false) {
        mainWindow = new BrowserWindow({
            width: 1000,
            height: 800,
            webPreferences: {
                nodeIntegration: true
            }
        })
        console.log("Window has been created")
        windowshown = true;
        mainWindow.loadFile('configuration.html')

        mainWindow.on('close', (event) => {
            event.preventDefault();
            console.log("Window has been hidden");
            mainWindow.hide();
        })
    }
    else {
        mainWindow.show();
        console.log("Window has been shown");
    }
}

当我隐藏mainWindow时,mainWindow.on('close')被调用多次

我做了一个基本的电子托盘,当点击其中一个选项时打开一个窗口。我检查是否用bool打开BrowserWindow并创建或显示/隐藏窗口。

const contextMenu = Menu.buildFromTemplate([
      { label: 'Open configuration menu', click:() => {
        console.log("called createwin");
        createwin();
      }

而createwin是:

function createwin(){
  if (windowshown == false) {
  mainWindow = new BrowserWindow({
    width: 1000,
    height: 800,
    webPreferences: {
      nodeIntegration: true
    }
  })
  console.log("Window has been created")
  windowshown = true;
mainWindow.loadFile('configuration.html')
}
else {
  mainWindow.show(); 
  console.log("Window has been shown");
} 
  mainWindow.on('close', (event) => {
        event.preventDefault();
        console.log("Window has been hidden");
        mainWindow.hide();
    })
}

当我隐藏/显示它创建的窗口4次时,我的控制台看起来像这样:


called createwin
Window has been created
window has been hidden
called createwin
Window has been shown
window has been hidden
window has been hidden
called createwin
Window has been shown
window has been hidden
window has been hidden
window has been hidden
called createwin
window has been hidden
window has been hidden
window has been hidden
window has been hidden

在第四次之后,它只是停止响应。我甚至做不到

      mainWindow.removeAllListeners('close');
      mainWindow.close()
      mainWindow = null
      app.quit();

我的问题是我的应用程序在第四次隐藏窗口后完全没有响应。

更新:如果我从npm start而不是visual studio代码的调试器开始,隐藏窗口后应用程序将完全无响应。

我在这里错过了什么?

回答如下:

无论何时调用close,都会向createwin事件添加一个新的事件监听器。然后在窗口关闭时运行每个事件处理程序,从而产生重复的window has been hidden

在创建新窗口时,您只需要添加一次事件处理程序:

function createwin(){
    if (windowshown == false) {
        mainWindow = new BrowserWindow({
            width: 1000,
            height: 800,
            webPreferences: {
                nodeIntegration: true
            }
        })
        console.log("Window has been created")
        windowshown = true;
        mainWindow.loadFile('configuration.html')

        mainWindow.on('close', (event) => {
            event.preventDefault();
            console.log("Window has been hidden");
            mainWindow.hide();
        })
    }
    else {
        mainWindow.show();
        console.log("Window has been shown");
    }
}
发布评论

评论列表 (0)

  1. 暂无评论