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

标签 javascript c# node.js electron edge.js

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

相关文章:

抽象基类中的 c# 属性

javascript - Jquery:mousedown效果(按住左键时)

html - 在 Javascript 中缩放图像视口(viewport)

c# - 父页面数据控件绑定(bind)之后,用户控件中的下一个事件是什么?

node.js - 在node js中解析oauth客户端 token

javascript - "Window.onload"无法在 Node.js 中工作

node.js - Express + Passport.js : req. 用户未定义

javascript - 如何在 WinRT JavaScript 应用程序中获取屏幕分辨率?

javascript - 根据正整数或负整数更改文本颜色

c# - 在 win 7 中打开文件对话框