我正在尝试在第一个窗口中更改状态更改的另一个窗口中更新状态,但是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冻结。
这是什么问题?
答案 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);
为我解决了这个问题。