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

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. 这将允许在初始设置后渲染器之间直接进行通信。
http://www.xdnf.cn/news/6549.html

相关文章:

  • 128.在 Vue 3 中使用 OpenLayers 实现绘制矩形截图并保存地图区域
  • 关于xammp数据库打开不了,但是日志没错误的问题解决以及其数据库的备份
  • 如何利用 Python 爬虫按关键字搜索京东商品:实战指南
  • Docker 安装 MySQL8
  • OpenCV 图像直方图:从原理剖析到实战应用
  • linux系统服务
  • Qt信号槽机制与UI设计完全指南:从基础原理到实战应用
  • 【笔试训练】简单写词|dd爱框框|除2!
  • Cursor无法使用C/C++调试的解决办法
  • Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
  • Hugging Face 中 LeRobot 使用的入门指南
  • LangChain4j +DeepSeek大模型应用开发——10 检索增强生成 RAG
  • Ubuntu下配置VScode出现#include错误请更新includePath的解决方法
  • Java类一文分解:JavaBean,工具类,测试类的深度剖析
  • 汽车零部件冲压车间MES一体机解决方案
  • 卷积神经网络和深度神经网络的区别是什么?
  • 数据结构与算法-线性表-单链表(Linked List)
  • OSCP备战-kioptrix 2014详细步骤
  • 第三十一节:直方图处理-直方图反向投影
  • 题目:两个线程交替输出1-100的数字,例如:t1--》1,t2--》2,....
  • 最小生成树(竞赛)
  • python基础语法(三-上)
  • 技术文档:变频器干扰问题与解决方案
  • 印度全印度游戏联合会(AIGF)介绍与用途
  • 本地化部署HomeAssistant语音助手并接入DeepSeek
  • git 本地提交后修改注释
  • 数控机床控制单元技术方案:基于EFISH-SCB-RK3588/SAIL-RK3588的赛扬N100/N150国产化替代全场景解析
  • Seata源码—3.全局事务注解扫描器的初始化二
  • Femap许可用户行为分析
  • 培训考试系统在职业技能培训中发挥着怎么样的作用