上一篇讲述了主进程和渲染进程之间的通信,其中是通过调用 ipcMain 和 ipcRenderer 来完成的。比如渲染进程给主进程发送一个消息,然后主进程再返回一个消息给渲染进程:

主进程的逻辑:

ipcMain.on('selectDate',(e,date)=>{
		console.log("渲染进程发送的日期",date)
		mainWindow.webContents.send("returnInfo", date)
	})

渲染进程的逻辑:

ipcRenderer.send('selectDate', date);
window?.electron?.ipcRenderer?.selectDate(JSON.stringify(value))

这里我们使用的是 ipcMain.on 和 ipcRenderer.send。除了这两种方式,Electron 还提供了ipcMain.handle 和 ipcRenderer.invoke 方法。不同的是 ipcMain.handle 和 ipcRenderer.invoke 方法是异步调用的风格,可以根据自己的规范选择合适的 API。实例部分代码如下:

主进程:

ipcMain.handle('selectDate',(e,date)=>{
		console.log("渲染进程发送的日期",date)
		mainWindow.webContents.send("returnInfo", date)
	})

渲染进程:

selectDate: (date:string) => {
            return ipcRenderer.invoke('selectDate', date)
        },

现在这些功能:

  1. 一个渲染进程发送的消息,主进程可以接收到,其他的渲染进程也可以接收到;
  2. 主进程发送消息,所有渲染进程都能接收到