Exemplo n.º 1
0
        public IProcessInfo Activate(IEndpointInfo endpointInfo, ICommand command)
        {
            var cancellationTokenSource = new CancellationTokenSource();
            var cancellationToken       = cancellationTokenSource.Token;

            var paramsList = MapParams(cancellationToken, endpointInfo, command);

            Task task        = null;
            var  processInfo = new PlatformProcessInfo(cancellationTokenSource, endpointInfo.Devices);

            if (endpointInfo.NeedMainThread)
            {
                task = CreateTaskForMainThread(cancellationToken, endpointInfo, paramsList, processInfo);
            }
            else
            {
                task = CreateTaskForUsualThread(cancellationToken, endpointInfo, paramsList, processInfo);
            }

            processInfo.SetTask(task);

            return(processInfo);
        }
Exemplo n.º 2
0
        private Task CreateTaskForMainThread(CancellationToken cancellationToken, IEndpointInfo endpointInfo, object[] paramsList, PlatformProcessInfo processInfo)
        {
            var platformListener = endpointInfo.Object;

            var task = new Task(() =>
            {
                try
                {
                    var invocableInMainThreadObj = new InvocableInMainThread(() => {
                        endpointInfo.MethodInfo.Invoke(platformListener, paramsList);
                    }, _invokingInMainThread);

                    invocableInMainThreadObj.Run();

                    processInfo.Status = ProcessStatus.Completed;
                }
                catch (TargetInvocationException)
                {
                }
                catch (Exception e)
                {
#if DEBUG
                    Log($"e = {e}");
#endif

                    processInfo.Status = ProcessStatus.Faulted;
                }
            }, cancellationToken);

            return(task);
        }