Пример #1
0
        private void butStart_Click(object sender, EventArgs e)
        {
            // Disable the Start button
            butStart.Enabled = false;
            // Enable the Stop button
            butStop.Enabled = true;

            // Start running the code programmed in each BackgroundWorker DoWork event handler
            // in a new independent thread and return control to the application's main thread
            // First, create the CodeBreakerParameters for each BackgroundWorker and set its parameters
            CodeBreakerParameters loParameters1 = new CodeBreakerParameters();
            CodeBreakerParameters loParameters2 = new CodeBreakerParameters();
            CodeBreakerParameters loParameters3 = new CodeBreakerParameters();
            CodeBreakerParameters loParameters4 = new CodeBreakerParameters();

            loParameters1.MaxUnicodeCharCode = 32000;
            loParameters1.FirstCharNumber    = 0;
            loParameters1.LastCharNumber     = 0;
            loParameters2.MaxUnicodeCharCode = 32000;
            loParameters2.FirstCharNumber    = 1;
            loParameters2.LastCharNumber     = 1;
            loParameters3.MaxUnicodeCharCode = 32000;
            loParameters3.FirstCharNumber    = 2;
            loParameters3.LastCharNumber     = 2;
            loParameters4.MaxUnicodeCharCode = 32000;
            loParameters4.FirstCharNumber    = 3;
            loParameters4.LastCharNumber     = 3;
            bakCodebreaker.RunWorkerAsync(loParameters1);
            bakCodebreaker2.RunWorkerAsync(loParameters2);
            bakCodebreaker3.RunWorkerAsync(loParameters3);
            bakCodebreaker4.RunWorkerAsync(loParameters4);
        }
Пример #2
0
        private void DoWorkProcedure(object sender, DoWorkEventArgs e)
        {
            CodeBreakerParameters loCodeBreakerParameters = (CodeBreakerParameters)e.Argument;

            // This variable holds the last Unicode character to be processed
            //int liTotal = (int)e.Argument;
            int liTotal = loCodeBreakerParameters.MaxUnicodeCharCode;

            // This variable will hold the broken code
            string lsBrokenCode = "";

            // This code will break the simulated code
            // This variable will hold a number to iterate from 0 to liTotal - Unicode character set
            int i;
            // This variable will hold a number to iterate from 0 to 3 (the characters positions in the code to be broken)
            int liCharNumber;
            // This variable will hold a char generated from the number in i
            char lcChar;
            // This variable will hold the current Label control that shows the char position being decoded
            //Label loOutputCharCurrentLabel;

            // This variable will hold a CodeBreakerProgress instance
            CodeBreakerProgress loCodeBreakerProgress = new CodeBreakerProgress();
            // This variable will hold the last percentage of the iteration completed
            int liOldPercentageCompleted;

            liOldPercentageCompleted = 0;
            for (liCharNumber = loCodeBreakerParameters.FirstCharNumber; liCharNumber <= loCodeBreakerParameters.LastCharNumber; liCharNumber++)
            {
                // This loop will run (liTotal + 1) times
                for (i = 0; i <= liTotal; i++)
                {
                    // We must check whether the user pressed the cancellation button or not
                    if (((BackgroundWorker)sender).CancellationPending)
                    {
                        // The user requested to cancel the process
                        e.Cancel = true;
                        return;
                    }

                    // myChar holds a Unicode char
                    lcChar = (char)(i);

                    // The percentage completed is calculated and stored in the PercentageCompleted property
                    loCodeBreakerProgress.PercentageCompleted = (int)((i * 100) / liTotal);
                    loCodeBreakerProgress.CharNumber          = liCharNumber;
                    loCodeBreakerProgress.CharCode            = i;

                    if (loCodeBreakerProgress.PercentageCompleted > liOldPercentageCompleted)
                    {
                        // The progress is reported only when it changes with regard to the last one (liOldPercentageCompleted)
                        ((BackgroundWorker)sender).ReportProgress(loCodeBreakerProgress.PercentageCompleted, loCodeBreakerProgress);
                        //Application.DoEvents();
                        // The old percentage completed is now the percentage reported
                        liOldPercentageCompleted = loCodeBreakerProgress.PercentageCompleted;
                    }

                    if (checkCodeChar(lcChar, liCharNumber))
                    {
                        // The code position was found
                        loCodeBreakerProgress.PercentageCompleted = 100;
                        ((BackgroundWorker)sender).ReportProgress(loCodeBreakerProgress.PercentageCompleted, loCodeBreakerProgress);
                        Application.DoEvents();
                        // The broken code is concatenated in lsBrokenCode
                        lsBrokenCode += lcChar.ToString();
                        break;
                    }
                }
            }

            // Create a new instance of the CodeBreakerResult class and set its properties values
            CodeBreakerResult loResult = new CodeBreakerResult();

            loResult.FirstCharNumber = loCodeBreakerParameters.FirstCharNumber;
            loResult.LastCharNumber  = loCodeBreakerParameters.LastCharNumber;
            loResult.BrokenCode      = lsBrokenCode;

            // Return a CodeBreakerResult instance in the Result property
            e.Result = loResult;
        }