当前位置: 首页 > news >正文

electron进程通信

electron进程通信

模式 1:渲染器进程到主进程(单向) send和on

1.渲染器进程调用方法

@click = setTitle

2.预加载进程暴露setTile方法

setTitle: (title) => ipcRenderer.send('set-title', title),

3.主进程监听到方法

  ipcMain.on('set-title',()=>{})

模式 2:渲染器进程到主进程(双向)invoke和handle

场景:双向 IPC 的一个常见应用是从渲染器进程代码调用主进程模块并等待结果。invoke(恳求-希望得到回应)

例子:从渲染器进程打开一个原生的文件对话框,并返回所选文件的路径。

步骤:

1.渲染器进程:

<button @click="getFilePath">获取文件路径</button>
  async function getFilePath(){filePath.value =await window.api.getFilePath()}

2.预加载暴露getFilePath方法(invoke)

getFilePath:()=>ipcRenderer.invoke('get-file-path')

3.主进程监听处理

ipcMain.handle('get-file-path',showFilePath)async function showFilePath(){const { canceled, filePaths } = await dialog.showOpenDialog({})if (!canceled) {return filePaths[0]}else{return false}}

模式 3:主进程到渲染器进程 webContents.send ipcRenderer.on

1.主进程通过webContents发消息给渲染进程

  const menu = Menu.buildFromTemplate([{label: app.name,submenu: [{click: () => mainWindow.webContents.send('update-counter', 1),label: 'Increment'},{click: () => mainWindow.webContents.send('update-counter', -1),label: 'Decrement'}]}])Menu.setApplicationMenu(menu)

2.预加载进程监听到,然后暴露给渲染进程

 getMainValue:(callback)=>ipcRenderer.on('update-counter',(_event,value)=>callback(value))

3.渲染进程获取

window.api.getMainValue((value)=>{count.value+=value
})

对于从主进程到渲染器进程的 IPC,没有与 ipcRenderer.invoke 等效的 API。 不过,您可以从 ipcRenderer.on 回调中将回复发送回主进程。即模式一

模式 4:渲染器进程到渲染器进程

没有直接的方法可以使用 ipcMainipcRenderer 模块在 Electron 中的渲染器进程之间发送消息。 为此,您有两种选择:

  • 将主进程作为渲染器之间的消息代理。 这需要将消息从一个渲染器发送到主进程,然后主进程将消息转发到另一个渲染器。
  • Pass a MessagePort from the main process to both renderers. 这将允许在初始设置后渲染器之间直接进行通信。

相关文章:

  • constexpr 关键字的意义(入门)
  • 怎样用 esProc 实现连续区间的差集运算
  • 什么是 NB-IoT ?窄带IoT 应用
  • 【SPIN】用Promela验证顺序程序:从断言到SPIN实战(SPIN学习系列--2)
  • 华为Watch的ECG功能技术分析
  • 解决 Ubuntu 22.04 安装后启动卡死问题
  • recvfrom和sendto函数中地址参数的作用
  • C++算法(22):二维数组参数传递,从内存模型到高效实践
  • 原生微信小程序 textarea组件placeholder无法换行的问题解决办法
  • postgresql主从+repmgr+keepalive安装
  • 如何在 IntelliJ IDEA 中配置并调用虚拟机 HDFS
  • uniapp微信小程序一键授权登录
  • AI数字人融合VR全景:开启未来营销与交互新篇章
  • 无人机动力系统全解析:核心组件、工作原理与实用指南
  • shell脚本练习(6):备份MySQL数据库表
  • MH22D3开发高级UI应用,适配arm2d驱动
  • 高效管理多后端服务:Nginx 配置与实践指南
  • 兼顾长、短视频任务的无人机具身理解!AirVista-II:面向动态场景语义理解的无人机具身智能体系统
  • ssh快速连接服务器终端配置
  • pyenv简单的Python版本管理器(macOS版)
  • 长三角体育节回归“上海时间”,首次发布赛事旅游推荐线路
  • 俄乌直接谈判结束
  • 广西百色“致富果”:高品质芒果直供香港,带动近五千户增收
  • 就规范涉企行政执法专项行动有关问题,司法部发布解答
  • 金融月评|尽早增强政策力度、调整施策点
  • 吉利汽车一季度净利润大增264%,称整合极氪后实现整体效益超5%