【问题标题】:How to electron main.ts call or send message to angular component如何电子 main.ts 调用或发送消息到角度组件
【发布时间】:2021-02-12 17:26:40
【问题描述】:

我知道如何使用 ipc 从 Angular 应用程序向电子主线程发送消息或调用函数。

但是,如果我有一些线程在电子主线程中运行,例如视频处理,并且在一些文件完成过程之后,电子需要发送消息和参数以更新角度 GUI。

电子主线程(main.ts)如何调用或调用 Angular EventEmitter 将一些数据发送回 Angular 应用程序。

【问题讨论】:

    标签: angular electron


    【解决方案1】:

    在尝试解决此操作几天后。 我针对这种情况的解决方案是在 main.ts 中创建 ipcMain 句柄并存储事件对象以回调到 angular。

    项目文件夹结构:

    • 电子项目
      • 角度应用
        • app.com.ts
        • app.com.html
      • main.ts
      • myelectron.com.ts
      • EventStore.ts
      • myelectonProcess.com.ts
    1. 在角度应用程序中 1.1 构造函数 - 注册回调 ipcRenderer 以接收来自电子的消息 1.2 构造函数 - 在 electron 中调用 ipcMain 来强制创建事件对象。

      constructor(private electronService: ElectronService)
      {
        this.registerIPC();
      }
    
      registerIPC()
      {
          //register callback ipcRenderer to receipt message from electron
          this.electronService.ipcRenderer.on('my_process_msg', (event, result) => {
            this.processing = result;
            //TODO do you logic here
          });
    
          //call ipcMain in electron to force create event object.
          this.electronService.ipcRenderer.send('my_process_msg');
      }
    1. 在电子 main.ts 中初始化时只创建 myeleectorn.com.ts 对象

    //TODO your code
    
    const main = () =>
    {
      const myElec = new MyElectronCom();
      myElec.registerIpcMain();
    }
    
    //TODO your code
    
    main();
    1. 在 myelectron.com.ts - 构造函数 - 注册 ipcMain.handle 以接收来自 Angular 的首次连接。并将该事件对象存储为全局对象,以便在其他电子应用程序中使用,以通过事件对象将消息发送回 Angular。

    export default class EventStore
    {
      
      MyProcessEvent:any = null;
    
    }

    export default class MyElectonCom
    {
      constructor()
      {
        this.registerIpcMain();
      }
      
      registerIpcMain()
      {
        //register to getEvent object for send scraping process status message.
            const {ipcMain} = require('electron');
            ipcMain.on('my_process_msg', (event) => {
                console.log('IPCMain event registered');
                
                //keep event object to resend again and again msg back to angular app.
                EventStore.MyProcessEvent = event;
                event.reply('my_process_msg', {progress:0, msg:'Registered'});
                
                //After this code and other class/coding can call EventStore.MyProcessEvent.send(....);
            });
      }
    
    }
    1. 在电子开发者的其他代码中可以调用事件对象将数据发送回角度应用程序。

    export default class MyElectonProcessCom
    {
      constructor()
      {
      }
      
      :
      :
      
      convertVideoFileProcessing(completedPercentage)
      {
        if(!empty(EventStore.MyProcessEvent){
            EventStore.MyProcessEvent.send('my_process_msg','Convert video to mp3 '+completedPercentage+'%');
        }
      }
      
      convertVideoFileCompleted()
      {
        if(!empty(EventStore.MyProcessEvent){
            EventStore.MyProcessEvent.send('my_process_msg','Convert video to mp3 completed');
        }
      }
    
    }

    【讨论】:

      猜你喜欢
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 2022-10-18
      • 2014-08-20
      相关资源
      最近更新 更多