gpt4 book ai didi

javascript - 在Node.js中使用edge.js处理C#.NET事件以获取 Electron

转载 作者:行者123 更新时间:2023-12-03 12:34:50 25 4
gpt4 key购买 nike

我需要从我的js到我的Electron项目中的C#DLL进行一些调用,并且这种方式可以正常工作:

C#

namespace Electron.Wrapper
{
public class QueryWrapper
{

public async Task<object> OnQuery(dynamic request)
{
...
return ..;
}
}
}

js
let edge = require('electron-edge-js');
let queryWrapperQuery = edge.func({
assemblyFile: '..dllUrl..',
typeName: 'Electron.Wrapper.QueryWrapper',
methodName: 'OnQuery'
});
window.query = function (options) {
queryWrapperQuery(JSON.stringify(options), function (error, result) {
...
});
}

问题是我使用了有时会触发异步事件的外部DLL,因此我需要找到一种方法来监听js中的.NET事件。

我找到 this way可以解决我的问题,但是我认为这是不正确的方法,因为我需要 Electron 的类库,而且我不知道如何与以前的方法一起使用它,并且可能不需要WebSocketServer。

.Net和js示例将得到重视。

谢谢,
安德里亚

更新1
我发现 this way,寒冷是正确的选择吗?我正在尝试实现.net,有什么建议吗?

最佳答案

我找到了一个好方法:

C#:

public Task<object> WithCallback(IDictionary<string, object> payload)
{
Func<object, Task<object>> changed = (Func<object, Task<object>>)payload["changed"];
return Task.Run(async () => await OnQuery(payload["request"], changed));
}

js:
var withCallback = edge.func({
assemblyFile: '..dllUrl..',
typeName: 'Electron.Wrapper.QueryWrapper',
methodName: 'WithCallback'
});

window.query = function (options) {
function triggerResponse(error, result) {
...
}

withCallback({
changed: (result) => triggerResponse(null, result),
request: JSON.stringify(options)
}, triggerResponse);
};

当需要更改某些东西时需要触发时,应在OnQuery函数中使用参数'payload':
public async Task<object> OnQuery(dynamic request, dynamic payload = null)
{
...
}

接下来,OnQuery返回值,您可以通过这种方式再次调用js回调:
payload("Notify js callback!");

我希望这可以帮助某人!

关于javascript - 在Node.js中使用edge.js处理C#.NET事件以获取 Electron ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55748564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com