主题
IPC通信 
在 Electron 中,进程间通信(IPC)是主进程和渲染进程之间进行数据交换的主要方式。Electron 提供了两种 IPC 方法:ipcMain 和 ipcRenderer。
1. ipcMain (主进程) 
ipcMain 是在主进程中定义的模块,用于监听来自渲染进程的消息。
javascript
// 主进程中的代码
const { ipcMain } = require('electron')
ipcMain.on('asynchronous-message', (event, arg) => {
  console.log(arg)  // 打印接收到的消息
  event.reply('asynchronous-reply', 'pong')  // 回复消息给渲染进程
})2. ipcRenderer (渲染进程) 
ipcRenderer 是在渲染进程中定义的模块,用于向主进程发送消息和接收主进程的回复。
javascript
// 渲染进程中的代码
const { ipcRenderer } = require('electron')
ipcRenderer.send('asynchronous-message', 'ping')
ipcRenderer.on('asynchronous-reply', (event, arg) => {
  console.log(arg)  // 打印从主进程接收到的回复
})同步通信 
除了异步通信外,ipcRenderer 还支持同步通信。但是请注意,由于同步通信会阻塞渲染进程,因此不建议在 UI 线程中使用,除非你确定这不会影响到用户体验。
javascript
// 渲染进程中的代码
const { ipcRenderer } = require('electron')
let response = ipcRenderer.sendSync('synchronous-message', 'ping')
console.log(response)3. 使用 IPC 传递复杂对象 
你可以通过 IPC 传递 JSON 序列化后的任何对象,包括数组、对象等。
javascript
// 主进程
ipcMain.on('complex-message', (event, arg) => {
  console.log(arg.someProperty)  // 访问对象属性
  event.reply('complex-reply', { response: 'pong' })
})
// 渲染进程
ipcRenderer.send('complex-message', { someProperty: 'someValue' })
ipcRenderer.on('complex-reply', (event, arg) => {
  console.log(arg.response)  // 打印回复的对象属性
})总之,IPC 在 Electron 中是非常重要的功能,它允许你轻松地在主进程和渲染进程之间进行通信,实现复杂的应用逻辑。