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(); }
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); }