Exemple #1
0
        public int AddPromise(PromiseTask promise)
        {
            if (lastId < 0)
            {
                throw new IndexOutOfRangeException(nameof(lastId));
            }

            promises[lastId] = promise;
            return(lastId++);
        }
Exemple #2
0
            protected override void DoAsyncWork(CefV8Context ctx, PromiseTask promiseTask)
            {
                int promiseId = pendingPromises.AddPromise(promiseTask);

                var browser = ctx.GetBrowser();
                var frame   = browser.GetMainFrame();
                var msg     = CefProcessMessage.Create("openFileRequest");

                msg.Arguments.SetInt(0, (int)promiseId);

                // This kicks off the RFC chain.
                frame.SendProcessMessage(CefProcessId.Browser, msg);
            }
 protected override void DoAsyncWork(CefV8Context ctx, PromiseTask promiseTask)
 {
     // Start running C# code in its own thread, no JS calls are allowed at this point.
     Task.Run(() =>
     {
         try
         {
             var result = promiseWorker.Method.Invoke(promiseWorker.Target, callerArguments);
             promiseTask.Resolve(result);
         }
         catch (Exception ex)
         {
             promiseTask.Reject(ex);
         }
     });
 }
Exemple #4
0
        /// <summary>
        /// Start executing the promise worker on a thread pool thread.
        /// </summary>
        /// <param name="arguments">The two callback provided by the JS side, one for resolving
        /// and one for rejecting the JS Promise.
        /// </param>
        protected override bool Execute(string name, CefV8Value obj, CefV8Value[] arguments, out CefV8Value returnValue, out string exception)
        {
            var resolveCb = arguments[0];
            var rejectCb  = arguments[1];

            var ctx         = CefV8Context.GetCurrentContext();
            var promiseTask = new PromiseTask(ctx, resolveCb, rejectCb);

            DoAsyncWork(ctx, promiseTask);

            // A fulfiller function doesn't return anything -- it's equivalent to
            // a 'void' C# function, so return 'undefined' to JS side.
            returnValue = CefV8Value.CreateUndefined();
            exception   = null !;
            return(true);
        }
Exemple #5
0
 protected abstract void DoAsyncWork(CefV8Context ctx, PromiseTask promiseTask);