在我的电子项目中,我需要从js调用我的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事件的方法。
我找到了这边请来解决我的问题,但我认为这不是正确的方法,因为我需要一个电子类库,我也不知道如何使用它,而且我可能也不需要WebSocketServer。
将对.Net和js示例进行估值。
谢谢你,安德里亚
更新1我找到了这边请,冷是对的吗?我正在尝试实现.net,有什么建议吗?
发布于 2019-04-23 07:06:15
我找到了一个好办法:
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));
}联署材料:
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函数中使用参数“有效载荷”:
public async Task<object> OnQuery(dynamic request, dynamic payload = null)
{
...
}接下来,OnQuery以这种方式返回您可以再次调用的值js回调:
payload("Notify js callback!");我希望这能帮到别人!
https://stackoverflow.com/questions/55748564
复制相似问题