Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

259
Views
Electron: cierra el renderizador del controlador principal

TLDR: la mejor manera de cerrar una ventana del renderizador desde la ventana principal (o el propio renderizador).

Estoy dividiendo un proceso entre X ventanas de representación invisible. Cuando un renderizador termina su trabajo, quiero que envíe un evento al proceso principal y luego se cierre. Ahora mismo tengo

 //invisibleRenderer.js doStuff().then(() => { ipcRenderer.invoke('finish'); }

¿Cuál es la mejor manera de cerrar la ventana? ¿Está en ipcMain.handle? No puedo averiguar qué método llamar con qué identificación.

 ipcMain.handle('finish', (event, args) => { //do what? event.frameId, event.processId, event.sender.id... })
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Puede usar BrowserWindow.fromId (event.sender.id) para obtener una referencia a la ventana desde donde se originó la llamada IPC, como se demuestra en esta pregunta .

Esto funciona bien en el proceso principal. El siguiente ejemplo abre 5 ventanas y carga el mismo contenido. Cada invocación de secuencia de comandos del renderizador elige un retraso aleatorio (para simular algún trabajo) y luego envía el mensaje de finish al proceso principal. Allí, el proceso principal toma la referencia de BrowserWindow usando event.sender.id y cierra la ventana correspondiente.

aplicación.js

 const {app, BrowserWindow, ipcMain} = require("electron"); const windows = []; app.on("ready", function() { for (let i=0; i<5; i++) { let win; win = new BrowserWindow( { width: 300, height: 300, x: i*100, y: i*100, webPreferences: { nodeIntegration: true, contextIsolation: false }, }); win.loadURL(`file://${__dirname}/index.html`); windows.push(win); } }); ipcMain.handle("finish", (event, args) => { const win = BrowserWindow.fromId(event.sender.id); win.close(); });

índice.html

 <html> <body> Renderer </body> <script type="text/javascript" src="renderer.js"></script> </html>

renderizador.js

 const {ipcRenderer} = require("electron"); // Simulate some work by choosing a random delay.. const delay = Math.round(Math.random()*10000); setTimeout(() => ipcRenderer.invoke("finish"), delay);
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!