两个窗口之间的电子+反应+还原通信会冻结PC吗?

时间:2016-11-07 20:11:42

标签: reactjs electron

我正在尝试在第一个窗口中更改状态更改的另一个窗口中更新状态,但是ipc communcation对我来说不能正常工作。

在我的第一个窗口中,我有:

if (!(this.props.isReport))

这是更新selectedStats状态的回调。它还将通知工作窗口此更新,如最后几行所示。 isReport这是一个重要的检查,因为两个窗口共享相同的组件,所以我使用属性 // Selected Stats have changed in main window ipcMain.on('updateSelectedStatsMain', (event, selectedStatsCopy) => { console.log('in main'); // Send to worker window workerWindow.webContents.send('updateSelectedStatsRen', event, selectedStatsCopy); }); 来区分这两个。

在我的主要流程中,我有:

selectedStatsCopy

此代码将使用新状态comoponentDidMount与工作窗口进行通信。

在我的componentDidMount() { // Register listening to message in case this is the worker window if (this.props.isReport) { console.log('in renderer worker window'); ipcRenderer.on("updateSelectedStatsRen", (event, selectedStatsCopy) => { console.log('in renderer worker window event'); this.setState({ selectedStats: selectedStatsCopy }); }); } } 中,我有:

ipcRenderer.send("updateSelectedStatsMain", event, selectedStatsCopy);

这应该可以工作,但电子在System.Drawing.Bitmap行挂起,使主窗口暂停一段时间,并继续使用资源,直到PC冻结。

这是什么问题?

1 个答案:

答案 0 :(得分:0)

我发现了错误,我仍然不知道它为什么会冻结电子。

基本上我在做

ipcRenderer.send("updateSelectedStatsMain", event, selectedStatsCopy);

这完全没有意义,因为我将事件作为参数传递。我甚至没有要传递的事件变量。

更新此内容:

ipcRenderer.send("updateSelectedStatsMain",event, selectedStatsCopy);

到此:

ipcRenderer.send("updateSelectedStatsMain", selectedStatsCopy);

和此:

workerWindow.webContents.send('updateSelectedStatsRen', event, selectedStatsCopy);

到此:

workerWindow.webContents.send('updateSelectedStatsRen', selectedStatsCopy);

为我解决了这个问题。