使用 Node.js 中的 edge.js 处理电子的 C# .NET 事件
Handing C# .NET events with edge.js in Node.js for electron
我需要在我的 Electron 项目中从我的 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 事件的方法。
我发现 this way 可以解决我的问题,但我认为这不是正确的方法,因为我需要一个用于 Electron 的 class 库,但我不知道也不知道如何使用以前的方式使用它,可能我不需要 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)
{
...
}
接下来的OnQueryreturn这个值你可以通过这种方式再次调用js回调:
payload("Notify js callback!");
希望对大家有所帮助!
我需要在我的 Electron 项目中从我的 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 事件的方法。
我发现 this way 可以解决我的问题,但我认为这不是正确的方法,因为我需要一个用于 Electron 的 class 库,但我不知道也不知道如何使用以前的方式使用它,可能我不需要 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)
{
...
}
接下来的OnQueryreturn这个值你可以通过这种方式再次调用js回调:
payload("Notify js callback!");
希望对大家有所帮助!