private void ProgressChangedProcedure(object sender, ProgressChangedEventArgs e) { // This variable will hold a CodeBreakerProgress instance CodeBreakerProgress loCodeBreakerProgress = (CodeBreakerProgress)e.UserState; // Update the corresponding ProgressBar with the percentage received in the as a parameter prloProgressChar[loCodeBreakerProgress.CharNumber].Value = loCodeBreakerProgress.PercentageCompleted; // Update the corresponding Label with the character being processed prloOutputCharLabels[loCodeBreakerProgress.CharNumber].Text = ((char)loCodeBreakerProgress.CharCode).ToString(); }
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; }