コード例 #1
0
        private void btnStart_Click(object sender, RoutedEventArgs e)
        {
            // Disable the Start button
            btnStart.IsEnabled = false;
            // Enable the Stop button
            btnStop.IsEnabled = true;
            // Start running the code programmed in
            // BackgroundWorker DoWork event handler
            // in a new independent thread and return control to
            // the application's main thread
            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);
            bakCodebreaker1.RunWorkerAsync(loParameters2);
            bakCodebreaker2.RunWorkerAsync(loParameters3);
            bakCodebreaker3.RunWorkerAsync(loParameters4);
            // bakCodebreaker.RunWorkerAsync();
        }
コード例 #2
0
        private void DoWorkProcedure(object sender, DoWorkEventArgs e)
        {
            // This variable will hold the broken code
            string lsBrokenCode = "";
            CodeBreakerParameters loCodeBreakerParameters = (CodeBreakerParameters)e.Argument;
            int liTotal = loCodeBreakerParameters.MaxUnicodeCharCode;

            Thread.Sleep(10000);
            // This code will break the simulated code.
            // This variable will hold a number to iterate from 1 to 65,535 - 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.
            TextBlock 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 = 0; liCharNumber < 4;
            //liCharNumber++)
            for (liCharNumber = loCodeBreakerParameters.FirstCharNumber;
                 liCharNumber <= loCodeBreakerParameters.LastCharNumber;
                 liCharNumber++)
            {
                loOutputCharCurrentLabel =
                    OutputCharLabels[liCharNumber];
                // This loop will run 65,536 times
                for (i = 0; i <= 65535; i++)
                {
                    //   if (bakCodebreaker.CancellationPending)
                    if (((BackgroundWorker)sender).CancellationPending)
                    {
                        // The user requested to cancel the process
                        e.Cancel = true;
                        return;
                    }
                    // myChar holds a Unicode char
                    lcChar = (char)(i);
                    //  loOutputCharCurrentLabel.Text = lcChar.ToString();
                    //Application.DoEvents();
                    // The percentage completed is calculated and stored in
                    // the PercentageCompleted property
                    loCodeBreakerProgress.PercentageCompleted = (int)((i * 100) /
                                                                      65535);
                    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)
                        // bakCodebreaker.ReportProgress(loCodeBreakerProgress.PercentageCompleted, loCodeBreakerProgress);
                        ((BackgroundWorker)sender).ReportProgress(loCodeBreakerProgress.
                                                                  PercentageCompleted, loCodeBreakerProgress);
                        // The old percentage completed is now the
                        // percentage reported
                        liOldPercentageCompleted = loCodeBreakerProgress.
                                                   PercentageCompleted;
                    }
                    if (checkCodeChar(lcChar, liCharNumber))
                    {
                        // The code position was found
                        loCodeBreakerProgress.PercentageCompleted = 100;
                        //    bakCodebreaker.ReportProgress(loCodeBreakerProgress.PercentageCompleted, loCodeBreakerProgress);
                        ((BackgroundWorker)sender).ReportProgress(loCodeBreakerProgress.PercentageCompleted, loCodeBreakerProgress);
                        // The code position was found
                        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;
                }
            }
            //  MessageBox.Show("The code has been decoded successfully.", this.Title);
        }