我已经在电子中配置了cli angular,我有一个链接,它执行一个交互ipcRenderer和ipcMain的函数:
HTML:
if(cmbBox1 != null && cmbBox1.IsLoaded) //<--
{
string cmb1TypeString = cmbBox1.SelectedItem.ToString();
}
组件:
<a (click)="check()"> click </a>
main.js(电子):
constructor(private _e: ElectronService) { }
check () {
this._e.ipcRenderer.send ('conn', 'round');
this._e.ipcRenderer.on ('conn-st', (event, args) => {
console.log (args);
});
}
问题在于,当您单击一次时,您只需执行一次,但当您再次单击时,它会执行3次,然后是4次,5次,依此类推。
到达11时抛出此错误:
ipcMain.on ('conn', function (event, args) {
event.sender.send ('conn-st', 'trip');
});
如何结束ipcRenderer和ipcMain之间的连接?
答案 0 :(得分:4)
该错误消息只表示,11个听众来自&#34; socket&#34; (就像UNIX中的那些)是创建的。每个侦听器都会创建一个在创建侦听器时返回的唯一ID。基于此,删除一个特定的侦听器可以这样做:
// Create a listener.
var myListener = ipcRenderer.on("channel", function (event, args) {});
// Delete only this one by its ID:
ipcRenderer.removeListener("channel", myListener);
但您也可以删除为套接字创建的所有侦听器,如下所示:
// Create a few listeners.
var myListener0 = ipcRenderer.on("channel", function (event, args) {});
var myListener1 = ipcRenderer.on("channel", function (event, args) {});
var myListener2 = ipcRenderer.on("channel", function (event, args) {});
var myListener3 = ipcRenderer.on("channel", function (event, args) {});
// Delete all listeners for socket "channel".
ipcRenderer.removeAllListeners("channel");
电子文档中也对此进行了介绍,尤其是here。
答案 1 :(得分:1)
根据电子文档documentation,已接受的答案不再正确。侦听器是一个函数,应按如下所示将其删除。
// Create a listener
let listener = (event, args) => {}
ipcRenderer.on("channel", listener );
//Delete the listener
ipcRenderer.removeListener("parse-cm-request", listener);