国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

electron+vue3全家桶+vite項(xiàng)目搭建【13.1】ipc通信的使用,主進(jìn)程與渲染進(jìn)程之間的交互

這篇具有很好參考價(jià)值的文章主要介紹了electron+vue3全家桶+vite項(xiàng)目搭建【13.1】ipc通信的使用,主進(jìn)程與渲染進(jìn)程之間的交互。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

引入

electron項(xiàng)目常常由一個(gè)主進(jìn)程和多個(gè)渲染進(jìn)程構(gòu)成,渲染進(jìn)程之間是隔離的,而所有渲染進(jìn)程都和主進(jìn)程共享資源。

  • 所有的渲染進(jìn)程都是由主進(jìn)程創(chuàng)建的
  • 每個(gè)窗口都對(duì)應(yīng)著一個(gè)渲染進(jìn)程
  • 所有的渲染進(jìn)程共享一個(gè)主進(jìn)程

我們主進(jìn)程與渲染進(jìn)程交互,渲染進(jìn)程與渲染進(jìn)程交互【多窗口交互】,都需要借助ipc通信來實(shí)現(xiàn)
封裝加載進(jìn)度顯示,新建窗口 演示主進(jìn)程與渲染進(jìn)程通信
demo項(xiàng)目地址
官方ipc進(jìn)程通信講解教程
electron官方文檔ipc通信

IPC通信[主/渲染]進(jìn)程對(duì)應(yīng)

方向 主進(jìn)程【ipcMain】 渲染進(jìn)程【ipcRenderer】
渲染=>主 【同步/異步】 ipcMain.on() ipcRender.send() / ipcRender.sendSync() 【同步取值】
渲染=>主 【異步】 ipcMain.handle() ipcRender.invoke()
主=>渲染 【異步】 BrowserWindow【實(shí)例】.webContents.send() ipcRender.on()

渲染進(jìn)程=>主進(jìn)程

electron+vue3全家桶+vite項(xiàng)目搭建【13.1】ipc通信的使用,主進(jìn)程與渲染進(jìn)程之間的交互,electron+vue3全家桶,electron,ipc通信,進(jìn)程交互,vue3全家桶

代碼測試

1.我們創(chuàng)建一個(gè)ipc測試文件,ipcDemo.ts

  • electron\main\ipcDemo.ts
  • 注意:按官方文檔來看,sendSync和handle中的return,是屬于雙向通信,這里為了方便演示同步/異步,直接拿他們來做演示,其實(shí)實(shí)際使用看來,只要不返回值,完全也可以當(dāng)做單向通信
import { ipcMain } from "electron";

export const initIpcDemo = () => {
  // 同步處理通信,并等待主進(jìn)程返回值
  ipcMain.on("event-on-test", (e, data: string) => {
    setTimeout(() => {
      e.returnValue = "主進(jìn)程同步響應(yīng):" + data;
    }, 2000);
  });

  // 異步處理通信,異步返回結(jié)果
  ipcMain.handle("event-handle-test", (e, data: string) => {
      return "主進(jìn)程異步響應(yīng):" + data;
  });

  // 異步處理一次
  ipcMain.handleOnce("event-handleOnce-test", (e) => {
    console.log("異步通信處理一次!");
  });
};

2.接著我們?cè)趀lectron的入口文件中引入

  • electron\main\index.ts
import {initIpcDemo} from './ipcDemo'

// 初始化ipc通信Demo
initIpcDemo();

3.我們創(chuàng)建一個(gè)ipcDemo的.vue文件,測試渲染進(jìn)程=>主進(jìn)程的單向通信:

  • src\components\demo\ipcDemo.vue
<template>
  <div>
    <go-back></go-back>
    <ul>
      <li><el-button @click="eventOnTest">同步通信測試</el-button></li>
      <li><el-button @click="eventHandleTest">異步通信測試</el-button></li>
      <li><el-button @click="eventHandleOnceTest">異步通信一次</el-button></li>
    </ul>
  </div>
</template>

<script setup lang="ts">
import { ipcRenderer } from "electron";
import { onMounted, onUnmounted } from "vue";
// 同步通信測試
function eventOnTest() {
  const result = ipcRenderer.sendSync("event-on-test", "狼來了");
  console.log(result);
}

// 異步通信測試
function eventHandleTest() {
  ipcRenderer.invoke("event-handle-test", "小龍你好").then((res) => {
    console.log(res);
  });
}

// 異步通信一次
function eventHandleOnceTest() {
  ipcRenderer.invoke("event-handleOnce-test");
}
</script>

<style scoped lang="scss"></style>

4.補(bǔ)充對(duì)應(yīng)的頁面路由后,我們看一下測試結(jié)果

測試效果

electron+vue3全家桶+vite項(xiàng)目搭建【13.1】ipc通信的使用,主進(jìn)程與渲染進(jìn)程之間的交互,electron+vue3全家桶,electron,ipc通信,進(jìn)程交互,vue3全家桶

主進(jìn)程=>渲染進(jìn)程

electron+vue3全家桶+vite項(xiàng)目搭建【13.1】ipc通信的使用,主進(jìn)程與渲染進(jìn)程之間的交互,electron+vue3全家桶,electron,ipc通信,進(jìn)程交互,vue3全家桶

代碼測試

1.我們?cè)谥鞔翱诔跏蓟戤叺牡胤窖a(bǔ)充代碼邏輯,創(chuàng)建一個(gè)定時(shí)器每隔兩秒向渲染進(jìn)程發(fā)送消息

  • electron\main\index.ts
 let number = 1;
  setInterval(() => {
    if (win && win.webContents) {
      win.webContents.send("event-from-main", "計(jì)數(shù)" + number++);
    }
  }, 2000);

electron+vue3全家桶+vite項(xiàng)目搭建【13.1】ipc通信的使用,主進(jìn)程與渲染進(jìn)程之間的交互,electron+vue3全家桶,electron,ipc通信,進(jìn)程交互,vue3全家桶

2.渲染進(jìn)程補(bǔ)充監(jiān)聽:

+src\components\demo\ipcDemo.vue

<script setup lang="ts">
    onMounted(()=>{
      ipcRenderer.on("event-from-main",eventFromMain);
    });
    
    // 來自主進(jìn)程的消息
    function eventFromMain(e:any,data:string){
      console.log("監(jiān)聽到消息",data)
    }

    onUnmounted(()=>{
      ipcRenderer.removeListener("event-from-main",eventFromMain);
    });
</script>

測試效果

electron+vue3全家桶+vite項(xiàng)目搭建【13.1】ipc通信的使用,主進(jìn)程與渲染進(jìn)程之間的交互,electron+vue3全家桶,electron,ipc通信,進(jìn)程交互,vue3全家桶

雙向通信

按官方文檔來看,主進(jìn)程handle并return,渲染進(jìn)程用promise語法,或主進(jìn)程on并e.returnValue,渲染進(jìn)程用sendSync就是雙向通信
electron+vue3全家桶+vite項(xiàng)目搭建【13.1】ipc通信的使用,主進(jìn)程與渲染進(jìn)程之間的交互,electron+vue3全家桶,electron,ipc通信,進(jìn)程交互,vue3全家桶
這里我個(gè)人認(rèn)為多窗口間的雙向通信適合用下面的寫法,上面的寫法在渲染進(jìn)程=>主進(jìn)程中已經(jīng)演示,故不贅述,這里主要演示下下面的使用
electron+vue3全家桶+vite項(xiàng)目搭建【13.1】ipc通信的使用,主進(jìn)程與渲染進(jìn)程之間的交互,electron+vue3全家桶,electron,ipc通信,進(jìn)程交互,vue3全家桶

代碼測試

1.主進(jìn)程補(bǔ)充邏輯,在收到渲染進(jìn)程的調(diào)用后,主動(dòng)給渲染進(jìn)程的窗口發(fā)送消息

  • electron\main\ipcDemo.ts
import { ipcMain } from "electron";

export const initIpcDemo = () => {
  // 雙向通信處理
  ipcMain.handle("event-handle-togeter-test", (e, data: string) => {
    e.sender.send("event-handle-togeter-test", "主進(jìn)程通知" + data);
  });
};

2.測試代碼補(bǔ)充邏輯

  • src\components\demo\ipcDemo.vue
<template>
  <div>
    <ul>
      <li>
        <el-button @click="eventHandleTogeterTestClick">雙向通信</el-button>
      </li>
    </ul>
  </div>
</template>

<script setup lang="ts">
import { ipcRenderer } from "electron";
import { onMounted, onUnmounted } from "vue";

onMounted(()=>{
  ipcRenderer.on("event-handle-togeter-test",eventHandleTogeterTest);
});

function eventHandleTogeterTestClick(){
  ipcRenderer.invoke("event-handle-togeter-test","奧利給");
}

// 雙向通信測試
function eventHandleTogeterTest(e:any,data:string) {
  console.log("渲染進(jìn)程監(jiān)聽到:",data);
}

onUnmounted(()=>{
  ipcRenderer.removeListener("event-handle-togeter-test",eventHandleTogeterTest);
});
</script>

<style scoped lang="scss"></style>

測試效果

  • 這里我們可以思考一下,假如我需要點(diǎn)擊一個(gè)窗口的按鈕,通知另一個(gè)窗口操作,就可以利用雙向通信,將另一個(gè)窗口的id傳遞給主進(jìn)程以及對(duì)應(yīng)的消息,主進(jìn)程通過窗口id找到對(duì)應(yīng)窗口,然后主動(dòng)通知窗口進(jìn)行對(duì)應(yīng)操作

electron+vue3全家桶+vite項(xiàng)目搭建【13.1】ipc通信的使用,主進(jìn)程與渲染進(jìn)程之間的交互,electron+vue3全家桶,electron,ipc通信,進(jìn)程交互,vue3全家桶文章來源地址http://www.zghlxwxcb.cn/news/detail-687551.html

到了這里,關(guān)于electron+vue3全家桶+vite項(xiàng)目搭建【13.1】ipc通信的使用,主進(jìn)程與渲染進(jìn)程之間的交互的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • electron+vue3全家桶+vite項(xiàng)目搭建【16.1】electron多窗口,pinia狀態(tài)同步,擴(kuò)展store方法,主動(dòng)同步pinia的狀態(tài)【推薦】

    electron+vue3全家桶+vite項(xiàng)目搭建【16.1】electron多窗口,pinia狀態(tài)同步,擴(kuò)展store方法,主動(dòng)同步pinia的狀態(tài)【推薦】

    demo項(xiàng)目地址 我們之前寫了一個(gè)自動(dòng)同步pinia狀態(tài)的插件,可以參考如下文章 electron+vue3全家桶+vite項(xiàng)目搭建【16】electron多窗口,pinia狀態(tài)無法同步更新問題解決 這里面有一個(gè)較大的弊端,就是pinia中的store,只要其中的某個(gè)屬性修改,就會(huì)觸發(fā)這個(gè)store的全量更新,當(dāng)我們有一

    2024年02月11日
    瀏覽(137)
  • vue vite ts electron ipc arm64

    系統(tǒng):debian 12 vscode 安裝 TypeScript Vue Plugin (Volar)、Vue Language Features (Volar)、C/C++ 擴(kuò)展 新建 plugins、src/electron 文件夾 添加 src/electron/background.ts 屬于主進(jìn)程 ipcMain.on、ipcMain.handle 都用于主進(jìn)程監(jiān)聽 ipc,ipcMain.on 用于監(jiān)聽 ipcRenderer.send,ipcMain.handle 用于監(jiān)聽 ipcRenderer.invoke 并 return

    2024年02月15日
    瀏覽(54)
  • 基于Electron24+Vite4+Vue3搭建桌面端應(yīng)用

    基于Electron24+Vite4+Vue3搭建桌面端應(yīng)用

    一說到創(chuàng)建桌面應(yīng)用,就不得不提及Electron和Tauri框架。這次給大家主要分享的是基于electron最新版本整合vite4.x構(gòu)建vue3桌面端應(yīng)用程序。 之前也有使用vite2+vue3+electronc創(chuàng)建桌面端項(xiàng)目,不過? vue-cli-plugin-electron-builder ?腳手架插件構(gòu)建的項(xiàng)目electron版本只有13.x。如今electron版本

    2024年02月06日
    瀏覽(46)
  • 現(xiàn)有的vue3+ts+vite項(xiàng)目集成electron

    現(xiàn)有的vue3+ts+vite項(xiàng)目集成electron

    Electron是使用JavaScript,HTML和CSS構(gòu)建跨平臺(tái)的桌面應(yīng)用程序框架。 Electron兼容Mac、Windows和Linux,可以構(gòu)建出三個(gè)平臺(tái)的應(yīng)用程序。 安裝依賴 原來有一個(gè)vue3+ts+vite+pnpm的項(xiàng)目,其中sub-modules是子項(xiàng)目,web是主入口項(xiàng)目,項(xiàng)目結(jié)構(gòu)如下: 需要將其轉(zhuǎn)換成Electron項(xiàng)目,只需要在原來

    2024年02月12日
    瀏覽(99)
  • 快速搭建Electron+Vite3+Vue3+TypeScript5腳手架 (無需梯子,快速安裝Electron)

    快速搭建Electron+Vite3+Vue3+TypeScript5腳手架 (無需梯子,快速安裝Electron)

    Electron是一個(gè)使用 JavaScript、HTML 和 CSS 構(gòu)建桌面應(yīng)用程序的框架。 嵌入?Chromium?和?Node.js?到 二進(jìn)制的 Electron 允許您保持一個(gè) JavaScript 代碼代碼庫并創(chuàng)建 在Windows上運(yùn)行的跨平臺(tái)應(yīng)用 macOS和Linux——不需要本地開發(fā)經(jīng)驗(yàn)(這段話是來自官網(wǎng))。 根據(jù)vite官網(wǎng)文檔 項(xiàng)目創(chuàng)建完成后進(jìn)

    2024年02月02日
    瀏覽(109)
  • 使用vue3+vite+elctron構(gòu)建小項(xiàng)目介紹Electron進(jìn)程間通信

    使用vue3+vite+elctron構(gòu)建小項(xiàng)目介紹Electron進(jìn)程間通信

    進(jìn)程間通信 (IPC) 是在 Electron 中構(gòu)建功能豐富的桌面應(yīng)用程序的關(guān)鍵部分之一。 由于主進(jìn)程和渲染器進(jìn)程在 Electron 的進(jìn)程模型具有不同的職責(zé),因此 IPC 是執(zhí)行許多常見任務(wù)的唯一方法,例如從 UI 調(diào)用原生 API 或從原生菜單觸發(fā) Web 內(nèi)容的更改。 在 Electron 中,進(jìn)程使用 ipcM

    2024年02月06日
    瀏覽(97)
  • electron+Vue3構(gòu)建桌面應(yīng)用之IPC通訊

    最近在做一個(gè)C/S架構(gòu)的項(xiàng)目預(yù)研 過程中遇到 Electron 與 Vue3 通訊的問題,費(fèi)勁巴力的在網(wǎng)上找方案,發(fā)現(xiàn)都不理想,最終攻克之后,計(jì)劃將過程寫下來,供有需求的同學(xué)白嫖! 開始之前,先說一件重要的事情: 看文檔 看官方文檔 一定要看官方文檔 好,言歸正傳。 先說需求

    2024年04月29日
    瀏覽(22)
  • vite+ vue3(現(xiàn)有項(xiàng)目或者新項(xiàng)目)+electron打包教程,以及electron代碼熱重載頁面(保姆級(jí)教程),一文帶你走完全過程

    vite+ vue3(現(xiàn)有項(xiàng)目或者新項(xiàng)目)+electron打包教程,以及electron代碼熱重載頁面(保姆級(jí)教程),一文帶你走完全過程

    ? 1.刪掉type這個(gè)字段,不然會(huì)報(bào)錯(cuò) ?2.然后加上\\\"main\\\": \\\"electron/main.js\\\", ?3.在scripts字段中加入啟動(dòng)electron的命令:如下圖 5.這時(shí)候你去打開控制臺(tái)輸入輸入npm run start會(huì)得到一片空白,展示如下頁面 1.因?yàn)楝F(xiàn)在監(jiān)聽的是vue打包后的dist文件夾中的index.html 2.我就不教你們?cè)趺创蜷_那個(gè)

    2024年02月11日
    瀏覽(649)
  • Vue3+Vite項(xiàng)目搭建

    Vue3+Vite項(xiàng)目搭建

    技術(shù)棧:vue3+ts+vite+vue-router+element-plus+pinia 為什么選擇vite而不是vue-cli: vite 是一個(gè)基于 Vue3 單文件組件的非打包開發(fā)服務(wù)器,它做到了本地快速開發(fā)啟動(dòng): 快速的冷啟動(dòng),不需要等待打包操作; 即時(shí)的熱模塊更新,替換性能和模塊數(shù)量的解耦讓更新飛起; 真正的按需編譯,

    2024年02月08日
    瀏覽(33)
  • vite搭建vue3項(xiàng)目

    vite搭建vue3項(xiàng)目

    參考視頻 創(chuàng)建一個(gè)項(xiàng)目名稱的文件夾 執(zhí)行命令:npm init -y 快速的創(chuàng)建一個(gè)默認(rèn)的包信息 安裝vite: npm i vite -D -D開發(fā)環(huán)境的依賴 安裝vue,現(xiàn)在默認(rèn)是vue3. 執(zhí)行命令: npm i vue -D/-S都可以 創(chuàng)建index.html文件,src=“入口js文件” ,添加id=\\\"app\\\"掛載點(diǎn) 創(chuàng)建src目錄下的js入口文件main.js 創(chuàng)建

    2024年02月09日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包