ipcMain.on和ipcMain.handle区别

好记:

渲染进程用 ipcRenderer.send 发,主进程用 ipcMain.on接,不期待返回;
渲染进程用 ipcRenderer.invoke 发,主进程用 ipcMain.handle接,期待返回;


ipcMain.onipcMain.handle 都用于 Electron 的主进程监听从渲染进程发来的消息。 这是一种允许跨进程通讯的方式。

ipcMain.on

ipcMain.on(channel, listener)这个方法主要用于监听从渲染进程发送过来的同步或异步消息。它不会直接返回任何值。如果你需要在回调函数中处理结果并将其发送回渲染进程,你需要使用 event.sender.send(...) 方法来发送响应。

ipcMain.on(channel, (event, arg1, arg2, ...argN) => {
  // Do something with the arguments
});
  • 示例:渲染进程–》主进程–》渲染进程
// 渲染进程发送
const { ipcRenderer } = require('electron');
ipcRenderer.send('xxx',"发送数据");
// 主进程接收
const { ipcMain } = require('electron');
ipcMain.on('xxx', (event,arg1) => {
 	event.sender.send('sendmessage', 'Hello from Main Process') //异步返回 往渲染进程发东西
});
// 渲染进程接收
ipcRenderer.on('sendmessage', (event, arg) => {
     console.log(event)
     console.log(arg) // prints "some data" sent from main process
})

ipcMain.handle

ipcMain.handle(channel, listener)这个方法用于处理从渲染进程发送过来的 invoke 请求,

// 主进程
ipcMain.handle(channel, (event, arg1, arg2, ...argN) => {
  // Do something and return a result
  return result;
});

也可以提供一个异步处理函数,结果将在 Promise 解析后返回给调用方:

// 主进程
ipcMain.handle(channel, async (event, arg1, arg2, ...argN) => {
  const result = await someAsyncOperation();
  return result;
});

然后在渲染进程中通过调用 invoke 来请求并获取结果:

// 渲染进程:
const { ipcRenderer } = require('electron');
(async () => {
  const result = await ipcRenderer.invoke('channel', arg1, arg2, ...argN);
  // Do something with the result
})();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值