コード例 #1
0
        public void InvokeOnUiThread(Action action, OperationPriority priority = OperationPriority.Normal,
                                     CancellationToken cancellationToken       = default(CancellationToken))
        {
            Should.NotBeNull(action, "action");
            if (cancellationToken.IsCancellationRequested)
            {
                return;
            }
            if (IsUiThread)
            {
                action();
                return;
            }
#if WPF
            Dispatcher.Invoke(action, ConvertToDispatcherPriority(priority), cancellationToken);
#else
            using (EventWaitHandle wait = new AutoResetEvent(false))
            {
                Dispatcher.BeginInvoke(() =>
                {
                    action();
                    wait.Set();
                });
                wait.WaitOne();
            }
#endif
        }
コード例 #2
0
 void IThreadManager.InvokeOnUiThread(Action action, OperationPriority priority,
     CancellationToken cancellationToken)
 {
     InvokeOnUiThread = action;
     if (ImmediateInvokeOnUiThread)
         action();
 }
コード例 #3
0
 /// <summary>
 ///     Invokes an action on the UI thread synchronous using the UiDispatcher.
 /// </summary>
 /// <param name="action">
 ///     The specified <see cref="Action" />.
 /// </param>
 /// <param name="priority">The specified <see cref="OperationPriority" /> to invoke the action.</param>
 /// <param name="cancellationToken">An object that indicates whether to cancel the operation.</param>
 public void InvokeOnUiThread(Action action, OperationPriority priority = OperationPriority.Normal,
     CancellationToken cancellationToken = default(CancellationToken))
 {
     Should.NotBeNull(action, "action");
     if (!cancellationToken.IsCancellationRequested)
         action();
 }
コード例 #4
0
 public void InvokeAsync(Action action, OperationPriority priority = OperationPriority.Normal,
                         CancellationToken cancellationToken       = default(CancellationToken))
 {
     Should.NotBeNull(action, nameof(action));
     Should.NotBeNull(action, nameof(action));
     Task.Factory.StartNew(action, cancellationToken);
 }
コード例 #5
0
        public void InvokeOnUiThread(Action action, OperationPriority priority = OperationPriority.Normal,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            Should.NotBeNull(action, nameof(action));
            if (cancellationToken.IsCancellationRequested)
                return;
            if (IsUiThread)
            {
                action();
                return;
            }
#if WPF
            Dispatcher.Invoke(action, ConvertToDispatcherPriority(priority), cancellationToken);
#else
            using (EventWaitHandle wait = new AutoResetEvent(false))
            {
                Dispatcher.BeginInvoke(() =>
                {
                    action();
                    wait.Set();
                });
                wait.WaitOne();
            }
#endif
        }
コード例 #6
0
 public void InvokeAsync(Action action, OperationPriority priority = OperationPriority.Normal,
     CancellationToken cancellationToken = default(CancellationToken))
 {
     Should.NotBeNull(action, nameof(action));
     Should.NotBeNull(action, nameof(action));
     Task.Factory.StartNew(action, cancellationToken);
 }
コード例 #7
0
 void IThreadManager.InvokeOnUiThreadAsync(Action action, OperationPriority priority,
     CancellationToken cancellationToken)
 {
     _invokeOnUiThreadAsync += action;
     if (ImmediateInvokeOnUiThreadAsync)
         InvokeOnUiThreadAsync();
 }
コード例 #8
0
 void IThreadManager.InvokeAsync(Action action, OperationPriority priority, CancellationToken cancellationToken)
 {
     InvokeAsync = action;
     if (ImmediateInvokeAsync)
     {
         InvokeAsync();
     }
 }
コード例 #9
0
 void IThreadManager.InvokeOnUiThread(Action action, OperationPriority priority,
                                      CancellationToken cancellationToken)
 {
     InvokeOnUiThread = action;
     if (ImmediateInvokeOnUiThread)
     {
         action();
     }
 }
コード例 #10
0
 public void InvokeOnUiThread(Action action, OperationPriority priority = OperationPriority.Normal,
                              CancellationToken cancellationToken       = default(CancellationToken))
 {
     Should.NotBeNull(action, "action");
     if (!cancellationToken.IsCancellationRequested)
     {
         action();
     }
 }
コード例 #11
0
 public void InvokeOnUiThread(Action action, OperationPriority priority = OperationPriority.Normal,
     CancellationToken cancellationToken = default(CancellationToken))
 {
     Should.NotBeNull(action, nameof(action));
     if (cancellationToken.IsCancellationRequested)
         return;
     if (IsUiThread)
         action();
     else
         _synchronizationContext.Send(state => ((Action)state).Invoke(), action);
 }
コード例 #12
0
 public void InvokeOnUiThreadAsync(Action action, OperationPriority priority = OperationPriority.Normal,
     CancellationToken cancellationToken = default(CancellationToken))
 {
     Should.NotBeNull(action, nameof(action));
     if (cancellationToken.IsCancellationRequested)
         return;
     if (priority != OperationPriority.Low && IsUiThread)
         action();
     else
         Dispatcher
             .RunAsync(ConvertToDispatcherPriority(priority), new DispatchedHandler(action))
             .AsTask(cancellationToken);
 }
コード例 #13
0
        private static DispatcherPriority ConvertToDispatcherPriority(OperationPriority priority)
        {
            switch (priority)
            {
            case OperationPriority.Low:
                return(DispatcherPriority.Background);

            case OperationPriority.Normal:
                return(DispatcherPriority.Normal);

            case OperationPriority.High:
                return(DispatcherPriority.Send);

            default:
                return(DispatcherPriority.Normal);
            }
        }
コード例 #14
0
 public void InvokeOnUiThread(Action action, OperationPriority priority = OperationPriority.Normal,
                              CancellationToken cancellationToken       = default(CancellationToken))
 {
     Should.NotBeNull(action, nameof(action));
     if (cancellationToken.IsCancellationRequested)
     {
         return;
     }
     if (IsUiThread)
     {
         action();
     }
     else
     {
         _synchronizationContext.Send(state => ((Action)state).Invoke(), action);
     }
 }
コード例 #15
0
        private static CoreDispatcherPriority ConvertToDispatcherPriority(OperationPriority priority)
        {
            switch (priority)
            {
            case OperationPriority.Low:
                return(CoreDispatcherPriority.Low);

            case OperationPriority.Normal:
                return(CoreDispatcherPriority.Normal);

            case OperationPriority.High:
                return(CoreDispatcherPriority.High);

            default:
                return(CoreDispatcherPriority.Normal);
            }
        }
コード例 #16
0
 public void InvokeOnUiThreadAsync(Action action, OperationPriority priority = OperationPriority.Normal,
                                   CancellationToken cancellationToken       = default(CancellationToken))
 {
     Should.NotBeNull(action, nameof(action));
     if (cancellationToken.IsCancellationRequested)
     {
         return;
     }
     if (priority != OperationPriority.Low && IsUiThread)
     {
         action();
     }
     else
     {
         Dispatcher
         .RunAsync(ConvertToDispatcherPriority(priority), new DispatchedHandler(action))
         .AsTask(cancellationToken);
     }
 }
コード例 #17
0
        public void BeginInvoke(Action action, OperationPriority priority)
        {
            if (_isShuttingDown)
            {
                return;
            }

            _queue.Enqueue(new DispatcherJob(action), priority);

            if (_isWaiting &&
                _therad.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)
            {
                _awakeFunction?.Invoke();
            }

            if (!_awaiter.IsSet && _awaiter is null)
            {
                _awaiter.Set();
            }
        }
コード例 #18
0
        public void InvokeOnUiThreadAsync(Action action, OperationPriority priority = OperationPriority.Normal,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            Should.NotBeNull(action, nameof(action));
            if (cancellationToken.IsCancellationRequested)
                return;
            if (priority != OperationPriority.Low && IsUiThread)
            {
                action();
                return;
            }
#if WPF
#if NET45
            Dispatcher.InvokeAsync(action, ConvertToDispatcherPriority(priority), cancellationToken);
#else
            Dispatcher.BeginInvoke(action, ConvertToDispatcherPriority(priority));
#endif
#else
            Dispatcher.BeginInvoke(action);
#endif
        }
コード例 #19
0
ファイル: ExpressionBase.cs プロジェクト: Jamiras/RATools
        private static ExpressionBase ParseExpression(PositionalTokenizer tokenizer, OperationPriority priority)
        {
            var expressionTokenizer = tokenizer as ExpressionTokenizer;

            if (expressionTokenizer != null)
            {
                var queuedExpression = expressionTokenizer.DequeueExpression();
                if (queuedExpression != null)
                {
                    return(queuedExpression);
                }
            }

            SkipWhitespace(tokenizer);

            if (tokenizer.NextChar == '\0')
            {
                return(ParseError(tokenizer, "Unexpected end of script"));
            }

            var clause = ParseClause(tokenizer);

            if (clause.Type == ExpressionType.ParseError || clause.Type == ExpressionType.Comment)
            {
                return(clause);
            }

            clause = ParseClauseExtension(clause, tokenizer, priority);
            if (clause.Type == ExpressionType.ParseError)
            {
                return(clause);
            }

            Debug.Assert(clause.Location.Start.Line != 0);
            Debug.Assert(clause.Location.Start.Column != 0);
            Debug.Assert(clause.Location.End.Line != 0);
            Debug.Assert(clause.Location.End.Column != 0);

            return(clause);
        }
コード例 #20
0
        public void InvokeOnUiThreadAsync(Action action, OperationPriority priority = OperationPriority.Normal,
                                          CancellationToken cancellationToken       = default(CancellationToken))
        {
            Should.NotBeNull(action, "action");
            if (cancellationToken.IsCancellationRequested)
            {
                return;
            }
            if (priority != OperationPriority.Low && IsUiThread)
            {
                action();
                return;
            }
#if WPF
#if NET45
            Dispatcher.InvokeAsync(action, ConvertToDispatcherPriority(priority), cancellationToken);
#else
            Dispatcher.BeginInvoke(action, ConvertToDispatcherPriority(priority));
#endif
#else
            Dispatcher.BeginInvoke(action);
#endif
        }
コード例 #21
0
 private static DispatcherPriority ConvertToDispatcherPriority(OperationPriority priority)
 {
     switch (priority)
     {
         case OperationPriority.Low:
             return DispatcherPriority.Background;
         case OperationPriority.Normal:
             return DispatcherPriority.Normal;
         case OperationPriority.High:
             return DispatcherPriority.Send;
         default:
             return DispatcherPriority.Normal;
     }
 }
コード例 #22
0
ファイル: ExprPrinter.cs プロジェクト: VitalyTVA/SharpAlg2
 static bool ShouldWrap(Expr expr, OperationPriority priority, ExpressionOrder order)
 {
     Func<OperationPriority, bool> shouldWrap = x => priority >= x;
     return expr.MatchStrict(
         add: x => shouldWrap(OperationPriority.Add),
         mult: x => IsMinusExpression(x) || shouldWrap(OperationPriority.Multiply),
         div: (x, y) => shouldWrap(OperationPriority.Divide),
         power: (x, y) => true, //shouldWrap(OperationPriority.Power),
         sqrt: x => false,
         param: x => false,
         @const: x => {
             if(x.IsFraction())
                 return shouldWrap(OperationPriority.Power);
             if(order == ExpressionOrder.Head)
                 return false;
             return x < 0;
         }
     );
 }
コード例 #23
0
 /// <summary>
 ///     Invokes an action asynchronous.
 /// </summary>
 /// <param name="action">
 ///     The specified <see cref="Action" />.
 /// </param>
 /// <param name="priority">The specified <see cref="OperationPriority" /> to invoke the action.</param>
 /// <param name="cancellationToken">An object that indicates whether to cancel the operation.</param>
 public void InvokeAsync(Action action, OperationPriority priority = OperationPriority.Normal,
     CancellationToken cancellationToken = default(CancellationToken))
 {
     InvokeOnUiThread(action, priority, cancellationToken);
 }
コード例 #24
0
ファイル: ExprPrinter.cs プロジェクト: VitalyTVA/SharpAlg2
 static string Wrap(Expr expr, OperationPriority currentPriority, ExpressionOrder order)
 {
     bool wrap = ShouldWrap(expr, currentPriority, order);
     string s = expr.Print();
     if(wrap)
         return "(" + s + ")";
     return s;
 }
コード例 #25
0
 public void InvokeAsync(Action action, OperationPriority priority = OperationPriority.Normal,
                         CancellationToken cancellationToken       = default(CancellationToken))
 {
     InvokeOnUiThread(action, priority, cancellationToken);
 }
コード例 #26
0
ファイル: ExpressionBase.cs プロジェクト: Jamiras/RATools
        private static ExpressionBase ParseClauseExtension(ExpressionBase clause, PositionalTokenizer tokenizer, OperationPriority priority)
        {
            do
            {
                var clauseEndLine   = tokenizer.Line;
                var clauseEndColumn = tokenizer.Column;

                SkipWhitespace(tokenizer);

                var joinerLine   = tokenizer.Line;
                var joinerColumn = tokenizer.Column;

                switch (tokenizer.NextChar)
                {
                case '+':
                    if (priority == OperationPriority.AddSubtract && clause.Type == ExpressionType.StringConstant)
                    {
                        priority = OperationPriority.AppendString;
                    }

                    if (priority >= OperationPriority.AddSubtract)
                    {
                        return(clause);
                    }

                    tokenizer.Advance();
                    clause = ParseMathematic(tokenizer, clause, MathematicOperation.Add, joinerLine, joinerColumn);
                    break;

                case '-':
                    if (priority >= OperationPriority.AddSubtract)
                    {
                        return(clause);
                    }

                    tokenizer.Advance();
                    clause = ParseMathematic(tokenizer, clause, MathematicOperation.Subtract, joinerLine, joinerColumn);
                    break;

                case '*':
                    if (priority >= OperationPriority.MulDivMod)
                    {
                        return(clause);
                    }

                    tokenizer.Advance();
                    clause = ParseMathematic(tokenizer, clause, MathematicOperation.Multiply, joinerLine, joinerColumn);
                    break;

                case '/':
                    if (priority >= OperationPriority.MulDivMod)
                    {
                        return(clause);
                    }

                    tokenizer.Advance();
                    clause = ParseMathematic(tokenizer, clause, MathematicOperation.Divide, joinerLine, joinerColumn);
                    break;

                case '%':
                    if (priority >= OperationPriority.MulDivMod)
                    {
                        return(clause);
                    }

                    tokenizer.Advance();
                    clause = ParseMathematic(tokenizer, clause, MathematicOperation.Modulus, joinerLine, joinerColumn);
                    break;

                case '=':
                    if (tokenizer.MatchSubstring("==") == 2)
                    {
                        if (priority >= OperationPriority.Compare)
                        {
                            return(clause);
                        }

                        tokenizer.Advance(2);
                        clause = ParseComparison(tokenizer, clause, ComparisonOperation.Equal, joinerLine, joinerColumn);
                    }
                    else
                    {
                        if (priority > OperationPriority.Assign)
                        {
                            return(clause);
                        }

                        tokenizer.Advance();
                        if (tokenizer.NextChar == '>')
                        {
                            tokenizer.Advance();
                            clause = AnonymousUserFunctionDefinitionExpression.ParseAnonymous(tokenizer, clause);
                        }
                        else
                        {
                            clause = ParseAssignment(tokenizer, clause, joinerLine, joinerColumn);
                        }
                    }
                    break;

                case '!':
                    if (priority >= OperationPriority.Compare)
                    {
                        return(clause);
                    }

                    tokenizer.Advance();
                    if (tokenizer.NextChar != '=')
                    {
                        ParseError(tokenizer, "= expected following !", joinerLine, joinerColumn);
                    }
                    else
                    {
                        tokenizer.Advance();
                        clause = ParseComparison(tokenizer, clause, ComparisonOperation.NotEqual, joinerLine, joinerColumn);
                    }
                    break;

                case '<':
                    if (priority >= OperationPriority.Compare)
                    {
                        return(clause);
                    }

                    tokenizer.Advance();
                    if (tokenizer.NextChar == '=')
                    {
                        tokenizer.Advance();
                        clause = ParseComparison(tokenizer, clause, ComparisonOperation.LessThanOrEqual, joinerLine, joinerColumn);
                    }
                    else
                    {
                        clause = ParseComparison(tokenizer, clause, ComparisonOperation.LessThan, joinerLine, joinerColumn);
                    }
                    break;

                case '>':
                    if (priority >= OperationPriority.Compare)
                    {
                        return(clause);
                    }

                    tokenizer.Advance();
                    if (tokenizer.NextChar == '=')
                    {
                        tokenizer.Advance();
                        clause = ParseComparison(tokenizer, clause, ComparisonOperation.GreaterThanOrEqual, joinerLine, joinerColumn);
                    }
                    else
                    {
                        clause = ParseComparison(tokenizer, clause, ComparisonOperation.GreaterThan, joinerLine, joinerColumn);
                    }
                    break;

                case '&':
                    if (tokenizer.MatchSubstring("&&") == 2)
                    {
                        if (priority >= OperationPriority.And)
                        {
                            return(clause);
                        }

                        tokenizer.Advance(2);
                        clause = ParseConditional(tokenizer, clause, ConditionalOperation.And, joinerLine, joinerColumn);
                    }
                    else
                    {
                        if (priority >= OperationPriority.BitwiseAnd)
                        {
                            return(clause);
                        }

                        tokenizer.Advance();
                        clause = ParseMathematic(tokenizer, clause, MathematicOperation.BitwiseAnd, joinerLine, joinerColumn);
                    }
                    break;

                case '|':
                    if (priority >= OperationPriority.Or)
                    {
                        return(clause);
                    }

                    tokenizer.Advance();
                    if (tokenizer.NextChar != '|')
                    {
                        ParseError(tokenizer, "| expected following |", joinerLine, joinerColumn);
                    }
                    else
                    {
                        tokenizer.Advance();
                        clause = ParseConditional(tokenizer, clause, ConditionalOperation.Or, joinerLine, joinerColumn);
                    }
                    break;

                default:
                    if (clause.Location.End.Column == 0)
                    {
                        clause.Location = new TextRange(clause.Location.Start, new TextLocation(clauseEndLine, clauseEndColumn));
                    }

                    return(clause);
                }

                if (clause.Type == ExpressionType.ParseError)
                {
                    return(clause);
                }
            } while (true);
        }
コード例 #27
0
 private static CoreDispatcherPriority ConvertToDispatcherPriority(OperationPriority priority)
 {
     switch (priority)
     {
         case OperationPriority.Low:
             return CoreDispatcherPriority.Low;
         case OperationPriority.Normal:
             return CoreDispatcherPriority.Normal;
         case OperationPriority.High:
             return CoreDispatcherPriority.High;
         default:
             return CoreDispatcherPriority.Normal;
     }
 }
コード例 #28
0
 public OperationBase(OperationPriority priority, bool isUnary)
 {
     this.Priority = priority;
     this.IsUnary = isUnary;
 }
コード例 #29
0
 public DecimalOperationBase(OperationPriority priority, bool isUnary)
     : base(priority, isUnary)
 {
 }
コード例 #30
0
        public int StartRoutine(IEnumerator routine, OperationType type = OperationType.Continuous, OperationPriority priority = OperationPriority.Normal)
        {
            var operation = new Operation
            {
                Id         = _idCounter,
                Enumerator = routine,
                Priority   = priority,
                Type       = type
            };

            _idCounter++;
            _operations.Add(operation);

            return(operation.Id);
        }