第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Electron Renderer 進(jìn)程:我應(yīng)該什么時(shí)候清理 IPC 監(jiān)聽器

Electron Renderer 進(jìn)程:我應(yīng)該什么時(shí)候清理 IPC 監(jiān)聽器

我有一個(gè) Electron 應(yīng)用程序,在渲染器進(jìn)程 ReactJs 和 Redux 基礎(chǔ)設(shè)施上連接并同步應(yīng)用程序所有打開進(jìn)程(一個(gè)主進(jìn)程和多個(gè)渲染器進(jìn)程)中的所有商店Redux 同步通信是通過電子 IPC 實(shí)現(xiàn)的,所以我有幾個(gè)不同通道的監(jiān)聽器,這些監(jiān)聽器是在每個(gè)渲染器進(jìn)程(瀏覽器窗口)中添加的例如,這里是監(jiān)聽從主進(jìn)程分派的動(dòng)作的代碼:export const listenToFromMainDispatchedActions = (store: Store, senderId: string): () => void => {  const listener = (event: IpcRendererEvent, args: any): void => {    if (!isValidAppAction(args)) {      appLogger.warn('Received an invalid action form main!!!');    } else {      const action: IAppReduxAction<any> = {        ...args,        meta: {          ...args.meta,          handler: ReduxActionHandler.RECEIVER,        },      };      if (action.meta.senderId !== senderId) store.dispatch(action);    }  };  ipcRenderer.on(IPCChannels.ACTION_DISPATCH, listener);  appLogger.warn('STORE_DISPATCH', 'ADDED ACTION_DISPATCH');  return (): void => {    ipcRenderer.removeListener(IPCChannels.ACTION_DISPATCH, listener);    appLogger.warn('STORE_DISPATCH', 'REMOVED ACTION_DISPATCH');  };};這段代碼在我的index.tsx文件中執(zhí)行如下:// index.tsx// ...export const GLOBAL_SENDER_ID = uuidV4();const store = storeCreator({  level: 'renderer',  reducer: renderersReducer,  sagas: mainAppWindowSagas,  senderId: GLOBAL_SENDER_ID,});const listenerRemover = listenToFromMainDispatchedActions(store, GLOBAL_SENDER_ID);...listenerRemover()我的問題是,為了刪除 IPC 偵聽器,如何以及何時(shí)調(diào)用是最好的方法?我試圖捕捉不同的文檔/窗口事件beforeunload,但無濟(jì)于事。為了保持一切“順利”,我實(shí)際上在應(yīng)用程序啟動(dòng)時(shí)打開所需的窗口并隱藏它們,關(guān)閉窗口隱藏它們而不是殺死它們,我意識(shí)到這是明智的問題事件,但我需要一種方法來優(yōu)雅地刪除這些聽眾,我沒有在文檔中找到任何有用的信息提前致謝
查看完整描述

1 回答

?
天涯盡頭無女友

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊

所以我想出的解決方案如下:


在瀏覽器端/渲染器進(jìn)程(在index.tsx)中,我執(zhí)行以下操作:


// index.tsx (renderer process)

// ...

export const GLOBAL_SENDER_ID = uuidV4();

const store = storeCreator({

  level: 'renderer',

  reducer: renderersReducer,

  sagas: mainAppWindowSagas,

  senderId: GLOBAL_SENDER_ID,

});


const listenerRemover = listenToFromMainDispatchedActions(store, GLOBAL_SENDER_ID);


const cleanup = (): void => {

   appLogger.log('WINDOW CLOSING');

   listenerRemover();

   window.removeEventListener('beforeunload', cleanup);

}


window.addEventListener('beforeunload', cleanup)

...

在主進(jìn)程中,我刪除了所有 ipcMain 對(duì)應(yīng)項(xiàng):


// index.ts

import { app, ipcMain } from 'electron';

import main from './main'

// ....

app.whenReady()

  .then(main)

  .catch((error) => {

    appLogger.error(TAG, error);

  });


// .....

app.on('before-quit', () => {

  Object.values(IPCChannels).forEach(

    (channel) => {

      ipcMain.removeAllListeners(channel);

    }

  );

  appLogger.log('CLEANED ALL IPCS');

  appLogger.log('Done, BYEBYE');

});



它似乎按預(yù)期工作并且我設(shè)法在相關(guān)位置看到日志,雖然我不太確定這種方法的有效性,但我會(huì)在幾天內(nèi)不回答我的問題(今天是 13.08.2020 12:15CEST)。


如果我在一周左右的時(shí)間里得不到任何其他/更好的答案,我會(huì)接受我的答案作為正確答案。


查看完整回答
反對(duì) 回復(fù) 2023-01-06
  • 1 回答
  • 0 關(guān)注
  • 340 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)