private static async Task RunAsyncApp(IBridgeToNode host) { try { host.Global.console.log($"Hello world from pid:{host.Global.process.pid}!"); await host.RunAsync(async() => { var global = host.Global; var console = global.console; console.log("Dynamic log from .Net is ", true); console.log("TestClass", global.TestClass.CreateNewInstance("Hallo ctor argument")); global.testCallback(new Func <string, string, string>(MarshalledDelegate), "SecondArg", "ThirdArg"); //global.gc(); await Task.Delay(100); console.log("DELAYED"); var dynInstance = host.New(); dynInstance.dynamicProperty1 = "DynProp1"; dynInstance.dynamicProperty2 = new Func <string, string, string>(MarshalledDelegate2); // TODO: Why can we not read from the dynamic properties? e.g. dynInstance.dynamicProperty1 //global.gc(); global.testCallback(new Func <string, string, string>(MarshalledDelegate2), dynInstance, "ThirdArg2"); await Task.Delay(100); //global.gc(); global.testCallback(new Func <string, string, string>(MarshalledDelegate), "3", dynInstance); //global.gc(); global.testCallback(new Func <string, string, string>((a, b) => { console.log("asdas"); return(null); }), "3", dynInstance); var tcs = new TaskCompletionSource <object>(); global.callLater(new Action(() => { console.log("We have been called later"); tcs.SetResult(null); throw new InvalidOperationException("Test exception"); })); Console.WriteLine($"Int from JS {(int)global.testAddon.a}"); await tcs.Task; }); } catch (Exception e) { Console.WriteLine("Exception: {0}", e); } finally { host.Global.console.log($"ByeBye world from pid:{host.Global.process.pid}!"); } }
public ElectronJSRuntime(IBridgeToNode node) { _node = node; using var dotNet = node.Global.DotNet; _jsCallDispatcher = dotNet.jsCallDispatcher; using var dotnetDispatcher = node.New(); dotnetDispatcher.invokeDotNetFromJS = new Func <string, string, dynamic, string, string>(InvokeDotNetFromJS); dotnetDispatcher.beginInvokeDotNetFromJS = new Action <long, string, string, dynamic, string>(BeginInvokeDotNetFromJS); dotnetDispatcher.endInvokeJSFromDotNet = new Action <long, bool, string>(EndInvokeJSFromDotNet); dotNet.attachDispatcher(dotnetDispatcher); JsonSerializerOptions.Converters.Add(new ElementReferenceJsonConverter()); }