Example #1
0
        private ArrayList BuildPrimeNumberList(int numberToTest, AsyncOperation asyncOp)
        {
            ProgressChangedEventArgs e = null;

            var primes       = new ArrayList();
            var firstDivisor = 1;
            var n            = 5;

            primes.Add(2);
            primes.Add(3);

            while (n < numberToTest && !IsTaskCanceled(asyncOp.UserSuppliedState))
            {
                if (IsPrime(primes, n, out firstDivisor))
                {
                    var progressPercentage = (int)((float)n / (float)numberToTest * 100);

                    e = new CalculatePrimeProgressChangedEventArgs(n, progressPercentage, asyncOp.UserSuppliedState);

                    asyncOp.Post(onProgressReportDelegate, e);

                    primes.Add(n);

                    // Yield the rest of this time slice.
                    Thread.Sleep(0);
                }

                // Skip even numbers.
                n += 2;
            }

            return(primes);
        }
Example #2
0
        // This event handler updates the ListView control when the
        // PrimeNumberCalculator raises the ProgressChanged event.
        //
        // On fast computers, the PrimeNumberCalculator can raise many
        // successive ProgressChanged events, so the user interface
        // may be flooded with messages. To prevent the user interface
        // from hanging, progress is only reported at intervals.
        private void primeNumberCalculator1_ProgressChanged(ProgressChangedEventArgs e)
        {
            if ((this.progressCounter++ % this.progressInterval) == 0)
            {
                Guid taskId = (Guid)e.UserState;

                if (e is CalculatePrimeProgressChangedEventArgs)
                {
                    CalculatePrimeProgressChangedEventArgs cppcea =
                        e as CalculatePrimeProgressChangedEventArgs;

                    this.UpdateListViewItem(taskId, cppcea.ProgressPercentage, cppcea.LatestPrimeNumberValue);
                }
                else
                {
                    this.UpdateListViewItem(taskId, e.ProgressPercentage);
                }
            }
            else if (this.progressCounter > this.progressInterval)
            {
                this.progressCounter = 0;
            }
        }