electron 主线程和渲染线程通信

  • Post author:
  • Post category:其他


开始我想说的是,文档很重要。强烈建议升级最新版本,不然你文档很多方法你用不了。



一、渲染线程(前端)向主线程(后台)发送消息

1.渲染线程

var data = ipcRenderer.sendSync('app-update', '')  //同步消息
ipcRenderer.send('app-update', "123") //异步消息

2.主线程

这里需要把前端的event 挂在global对象,args是前端发的第二个参数

 ipcMain.on('app-update', (event, ...args) => {
    global.eventValue =event
    // 其他处理逻辑
})

前端发送同步,和异步消息,响应的方式是不一样的

//对渲染线程同步消息响应
// global.eventValue.returnValue = percentage

// 响应渲染线程异步,异步消息响应需要在前端在绑定一个响应监听事件。
  global.eventValue.reply('show-percent',percentage) // ELECTRON VERSION>5.0.13
//electron5.0.13 以下
  // global.eventValue.sender.send('show-percent',percentage)

当然记得导包

import { app, BrowserWindow,ipcMain,ipcRenderer } from 'electron'



二、主线程(后台)向渲染线程(前端)发送消息

这里的例子是打开对话框

/**
* 发送消息
*/
const { webContents } = require('electron');

export async function openDialog(object) {

  return new Promise((resolve, reject) => {
    var content = webContents.getFocusedWebContents();
    if (content != null) {
      content.send('openDialog', object); // 这里关键
    }
    ipcMain.on('asynchronous-up', function (event, arg) {
      console.log("------------------------------------------------------");
      resolve(arg);
    })
  });
}

前端

 ipcRenderer.on("openDialog", (event, arg) => {
	//你的处理,如打开dialog
}

dialog的确定按钮逻辑,在发送消息给主线程

ipcRenderer.send("asynchronous-up", this.form);



三.渲染线程使用主线程的值

主线程

global.sharedObject = {
    p1:app.getAppPath(),
    p2:app.getName(),
    p3:app.getPath('exe')
  }

渲染线程

const data = remote.getGlobal('sharedObject');
  console.log(data);



版权声明:本文为weixin_42551915原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。