【发布时间】:2021-02-12 17:26:40
【问题描述】:
我知道如何使用 ipc 从 Angular 应用程序向电子主线程发送消息或调用函数。
但是,如果我有一些线程在电子主线程中运行,例如视频处理,并且在一些文件完成过程之后,电子需要发送消息和参数以更新角度 GUI。
电子主线程(main.ts)如何调用或调用 Angular EventEmitter 将一些数据发送回 Angular 应用程序。
【问题讨论】:
我知道如何使用 ipc 从 Angular 应用程序向电子主线程发送消息或调用函数。
但是,如果我有一些线程在电子主线程中运行,例如视频处理,并且在一些文件完成过程之后,电子需要发送消息和参数以更新角度 GUI。
电子主线程(main.ts)如何调用或调用 Angular EventEmitter 将一些数据发送回 Angular 应用程序。
【问题讨论】:
在尝试解决此操作几天后。 我针对这种情况的解决方案是在 main.ts 中创建 ipcMain 句柄并存储事件对象以回调到 angular。
项目文件夹结构:
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');
}
//TODO your code
const main = () =>
{
const myElec = new MyElectronCom();
myElec.registerIpcMain();
}
//TODO your code
main();
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(....);
});
}
}
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');
}
}
}
【讨论】: