示例#1
0
        public BigInteger CalculateAsync(int pNumber, CancellationToken CT)
        {
            if (pNumber < 0)
            {
                throw new ArgumentOutOfRangeException();
            }

            Initializing?.Invoke(this, new EventArgs());
            Stopwatch myWatch = new Stopwatch();

            myWatch.Start();
            // exemple while
            BigInteger result = 1;

            /*{
             *  int decrement = pNumber;
             *  while (decrement > 1)
             *  {
             *      result = result * decrement;
             *      //pNumber = pNumber - 1; // solution étendue
             *      decrement -= 1; // solution abrégée
             *                      //pNumber--;  // solution courte postfixée
             *                      //--pNumber;  // solution courte prefixée
             *  }
             * }*/
            //exemple for
            result = 1;
            for (int decrement = pNumber;
                 decrement > 1;
                 decrement--)
            {
                if (CT.IsCancellationRequested)
                {
                    myWatch.Stop();


                    if (Cancelled != null)
                    {
                        CancelledEventArgs CEA = new CancelledEventArgs(pNumber, myWatch.Elapsed);
                        Cancelled(this, CEA);
                    }
                    return(-1);
                }

                if (Progressing != null)
                {
                    ProgressingEventArgs PEA = new ProgressingEventArgs(pNumber, pNumber - decrement + 1);
                    OnProgressing(PEA);
                }
                Thread.Sleep(50);
                result = result * decrement;
            }
            myWatch.Stop();
            if (Completed != null)
            {
                CompletedEventArgs CEA = new CompletedEventArgs(pNumber, result, myWatch.Elapsed);
                OnCompleted(CEA);
            }
            return(result);
        }
示例#2
0
        public BigInteger CalculateAsync(int pNumber)
        {
            if (pNumber < 0)
            {
                throw new ArgumentOutOfRangeException();
            }

            Initializing?.Invoke(this, new EventArgs());
            Stopwatch myWatch = new Stopwatch();

            myWatch.Start();
            // exemple while
            BigInteger result = 1;

            //exemple for
            result = 1;
            for (int decrement = pNumber;
                 decrement > 1;
                 decrement--)
            {
                if (Progressing != null)
                {
                    ProgressingEventArgs PEA = new ProgressingEventArgs(pNumber, pNumber - decrement + 1);
                    OnProgressing(PEA);
                }
                Thread.Sleep(50);
                result = result * decrement;
            }
            myWatch.Stop();
            if (Completed != null)
            {
                CompletedEventArgs CEA = new CompletedEventArgs(pNumber, result, myWatch.Elapsed);
                OnCompleted(CEA);
            }
            return(result);
        }
示例#3
0
 protected virtual void OnProgressing(ProgressingEventArgs PEA)
 {
     Progressing(this, PEA);
 }