最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Electron IPC 渲染线程和主线程通讯

    正文概述 掘金(zidea)   2021-06-10   707

    这是我参与更文挑战的第2天,活动详情查看:更文挑战

    Electron IPC 渲染线程和主线程通讯

    有了 Electron ,我们就可以轻松地写桌面应用了,然后可以运行在不同操作系统,这是因为其原理基于浏览器内核实现应用。今天就来看一看在 Electron 中主线程是如何和渲染线程进行通讯的。那么需要先了解一下什么是主线程,什么又是渲染线程

    Electron 中,从 package.json 的 main 载入的 js 就是主进程,由主进程加载出来的页面就是渲染进程。主进程负责管理 Web 页面以及页面相应的渲染进程,包括原生的组件操作。而在 Electron 里的每个页面都有自己的进程,叫作渲染进程,主要负责 Web 的渲染。

    {
      "name": "Demo ",
      "main": "main.js",
      "description": " Electron ",
      "scripts": {
        "start": "electron ."
      },
      "devDependencies": {
        "electron": "^5.0.3"
      }
    }
    

    创建项目时候,在 package.json 中 main 属性指定文件就是 Electron 的主线程文件。Electron 会先运行此文件来启动我们应用。

    function createWindow() {
        mainWindow = new BrowserWindow({
            width: 800,
            height: 600,
            webPreferences: {
                devTools:true,
                nodeIntegration:true
            }
        })
        mainWindow.loadFile('index.html')
        mainWindow.webContents.openDevTools()
        mainWindow.on('closed', function () {
            mainWindow = null
        })
    }
    

    可以创建一个浏览器窗口,浏览器会加载项目下index.html文件。

      <script src="./index.js"></script>
    

    在 index.html 文件中引用的 index.js 是运行在渲染线程中。所以在 index.js 中 console 我们可以浏览器调试工具可以看到。而在 main.js 中的 console 是可以在后端看到输出。

    index.js(渲染进程)

    const {ipcRenderer} = require('electron');
    

    引入 ipc 依赖,使用 ipcRender 的 send 方法消息给 main.js(主线程)这个是异步的,我么可以在async-reply通道监听到返回事件,从而获取到事件对象来获取返回值。

    ipcRenderer.send('async-msg','ping');
    ipcRenderer.on('async-reply',(event,arg) => {
        console.log(arg);
    });
    

    main.js (主线程)

    const {
        app,
        BrowserWindow,
        ipcMain,
        shell
    } = require('electron');
    

    引入 ipcMain 线程,然后在 async-msg通道监听到从 index.js 发送过来请求,然后这里通过使用 nodejs 的 fs 模块提供方法来读取目录下文件,然后返回给渲染线程。这样就完成一来一回通讯

    
    ipcMain.on('async-msg',(event,arg)=>{
        console.log(arg)
    
        fs.readdir('/Users/jangwoo/Desktop/Zi/sf-test',(err,filenames)=>{
            if(err){
                event.reply('async-reply',err);
                return;
            }
            filenames.forEach((filename)=>{
                event.reply('async-reply',filename);
            })
        })
        
    })
    

    起源地下载网 » Electron IPC 渲染线程和主线程通讯

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元