Фоновый рабочий и индикатор выполнения не работают должным образом - PullRequest
0 голосов
/ 29 августа 2011

Привет пытался загрузить индикатор выполнения для моего приложения шифрования и сжатия.Я пытаюсь использовать фоновый рабочий для обновления индикатора выполнения на время, затраченное на сжатие и обработанное шифрование, но каким-то образом приложение показывает сообщение об ошибке шифрования, которое я включил в кнопку, а не успех.1002 * Это код моей кнопки

    private void lockButton_Click(object sender, EventArgs e)
    {

        if (this.passwordtextBox.Text == "")
        {
            MessageBox.Show("Please enter a password!");
        }
        else if (this.retypeTextBox.Text == "")
        {
            MessageBox.Show("Please retype password!");
        }
        else if (this.passwordtextBox.Text == this.retypeTextBox.Text)
        {
            details = new Details();
            details.SetPassword(this.passwordtextBox.Text);

            if (this.EncryptionComboBox.Text == "AES")
            {
                details.SetEncryption(this.EncryptionComboBox.Text);

                if (details.GetResult() == true)
                {
                    // Start the background worker
                    backgroundWorker1.RunWorkerAsync();
                }

                if (details.GetResult() == true)
                {
                    MessageBox.Show("Lock Success!");
                }
                else
                {
                    MessageBox.Show("Lock Unsuccess! Please try again");
                }
            }
        }
        else
        {
            MessageBox.Show("The password and verified password does not match!");
        }
    }

А это мой код рабочего фона

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        //declare lockcontroller to be used
        LockController lControl = new LockController();

        //run zipfile method and store result to fName
        lControl.compress(ifile, details);
        lControl.Encrypt(details);
        lControl.LockCleaner(details);
        int i = 100;

        // Report progress to 'UI' thread
        backgroundWorker1.ReportProgress(i);

        // Simulate long task
        System.Threading.Thread.Sleep(0000);            
    }

Мне было интересно, где это пошло не так.индикатор выполнения и оба шифрования не работают ..

Ответы [ 2 ]

3 голосов
/ 29 августа 2011
  1. Используйте string.IsNullOrEmpty (string) вместо чего-то == ""
  2. У вас нет настройки Worker Progress Event
  3. Похоже, вы добавили своего рабочего в фоновом режиме через UI Designer - создайте их в коде - намного чище
  4. kmcc049 прав - я также не вижу завершенного обработчика
  5. Проверьте эту ссылку для получения дополнительной информации о том, как это сделать. http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
2 голосов
/ 29 августа 2011

при выполнении этой строки backgroundWorker1.RunWorkerAsync(); она немедленно возвращается и выполняет следующую строку.Вам необходимо подписаться на событие RunWorkerCompleted для окна сообщения.

...