Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 23

Как правильно отследить прогресс BackgroundWorker

10.11.2022, 21:13. Показов 472. Ответов 0

Студворк — интернет-сервис помощи студентам
Всем привет! У меня сложилась такая ситуация, что не могу отследить прогресс бекграундворкера
Ниже привел свои попытки. Подскажите, кто знает, в чем проблема.


Код формы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
public partial class Form1 : Form
    {
        private Stopwatch stopWatch;
        public Form1()
        {
            InitializeComponent();
        }
 
        private void buttonChoseFile_Click(object sender, EventArgs e)
        {
            if (radioButtonCrypt.Checked)
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    textBoxFilePath.Text = openFileDialog.FileName;
                }
            }
            else
            {
                using (OpenFileDialog openFileDialog = new OpenFileDialog())
                {
                    openFileDialog.Filter = "(*.crypt)| *.crypt";
                    if (openFileDialog.ShowDialog() == DialogResult.OK)
                    {
                        textBoxFilePath.Text = openFileDialog.FileName;
                    }
                }
            }
        }
 
        private void CheckBoxPass_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBoxPass.Checked)
            {
                textBoxPassword.Enabled = true;
            }
            else
            {
                textBoxPassword.Enabled = false;
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            textBoxPassword.Enabled = false;
        }
 
        private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            Crypter crypter = new Crypter(textBoxFilePath.Text,textBoxPassword.Text);
            if (radioButtonCrypt.Checked)
            {
                stopWatch = new Stopwatch();
                stopWatch.Start();
                crypter.StartCrypt(ref backgroundWorkerCrypt);//Вот тут мне нужно отследить прогресс. Думал через ref, но выдает exception
                //Работяги, подскажите как мне отследить работу воркера. 
                //+ Во всех примерах, которые я видел использовался цикл фор, на нем легко отследить % выполения. А тут даже хз как сделать это
                stopWatch.Stop();
            }
        }
 
        private void backgroundWorkerCrypt_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
        {
            TimeSpan ts = stopWatch.Elapsed;
            string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
            ts.Hours, ts.Minutes, ts.Seconds,
            ts.Milliseconds / 10);
            MessageBox.Show($"{elapsedTime}");
        }
 
        private void button_do_Click(object sender, EventArgs e)
        {
            progressBar1.Maximum = 100;
            backgroundWorkerCrypt.RunWorkerAsync();
        }
 
        private void backgroundWorkerCrypt_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
        {
            progressBar1.Value += 1;
        }
    }
}
Class Crypter.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
public class Crypter
    {
        private string fileIn;
        private string fileOut;
        private string password;
 
        public Crypter()
        {
            fileIn = null;
            fileOut = null;
            password = null;
        }
        public Crypter(string fileIn_, string password_)
        {
            fileIn = fileIn_;
            fileOut =  fileIn_ + ".decrypt";
            password = password_;
        }
 
        public string FileIn
        {
            set { fileIn = value; }
            get { return fileIn; }
        }
        public string FileOut
        {
            set { fileOut = value; }
            get { return fileOut; }
        }
        public string Password
        {
            set { password = value; }
            get { return password; }
        }
 
 
   
        public void StartCrypt(ref BackgroundWorker worker)
        {
              
            FileStream fileStreamIn = File.OpenRead(fileIn);
            FileStream fileStreamOut = File.OpenWrite(fileOut);
 
            int symbol;
            int posPassword = 0;
            while ((symbol = fileStreamIn.ReadByte()) != -1)
            {
                symbol = symbol ^ password[posPassword];
                fileStreamOut.WriteByte((byte)symbol);
                posPassword++;
                if (posPassword >= password.Length)
                {
                    posPassword = 0;
                }
                worker.ReportProgress(0);//Вот тут хотел репортить прогресс 
            }
            fileStreamIn.Close();
            fileStreamOut.Close();
 
 
        }
 
        public void StartDeCrypt()
        {
            FileStream fileStreamIn = File.OpenRead(fileIn);
            FileStream fileStreamOut = File.OpenWrite(fileOut);
 
            int symbol;
            int posPassword = 0;
            while ((symbol = fileStreamIn.ReadByte()) != -1)
            {
                symbol = symbol ^ password[posPassword];
                fileStreamOut.WriteByte((byte)symbol);
                posPassword++;
                if (posPassword >= password.Length)
                {
                    posPassword = 0;
                }
            }
            fileStreamIn.Close();
            fileStreamOut.Close();
            
        }
 
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.11.2022, 21:13
Ответы с готовыми решениями:

Как отследить прогресс сжатия конкретного файла
Доброго времени суток! Возникла необходимость сжать текстовую информацию с помощью GZip. Алгоритм примерно такой: текстовый файл...

Передать различный прогресс из одного BackgroundWorker разным ProgressBar
Добрый день. В коде выполняется некая задача, BackgroundWorker1 рапортует в ProgressBar1 о полном прогрессе. Так же, в коде выполняется...

Как правильно описать и вызвать BackgroundWorker?
как правильно описать и вызвать BackgroundWorker? Добавлено через 25 минут Найдено

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.11.2022, 21:13
Помогаю со студенческими работами здесь

Отследить прогресс заполнения DataSet
Загружаю данные из текстового файла (порядка 200 000 строк) в DataSet // получаем кол-во строк из файла TextReader...

Как можно отследить состояние прогресс-бара?
всем привет! как можно отследить состояние прогресс-бара другой программы? проблема в том, что в спай я не нашел этот самый прогресс-бар,...

WPF - Как правильно использовать Task, Timer и BackgroundWorker совместно ?
Привет всем. Совсем недавно начал изучать работу с потоками в WPF и возникли немного вопросов, на которые, надеюсь, смогу ответить с вашей...

Как правильно отследить нажатие toggle в togglegroup?
есть панель, на ней togglegroup есть 3 toggle на toggle вешаем на событие OnValueChanged метод, например такой public void...

Как правильно отследить смену директории в QFileDialog?
Всем привет. Подскажите, почему данный код не работает? QFileDialog dialog; // const auto current_app_dir =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru