我需要从我的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/