Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
5 / 5 / 4
Регистрация: 11.10.2014
Сообщений: 57
1

BackgroundWorker1.WorkerReportsProgress не работает

09.02.2015, 15:30. Показов 1273. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Рассматриваю пример работы с ProgressBar.
По идее пример должен работать сразу после компиляции и запуска. Но ничего не работает.
Код программы.
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
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, System.EventArgs e)
        {
            // Start the BackgroundWorker.
            backgroundWorker1.RunWorkerAsync();
        }
 
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 1; i <= 100; i++)
            {
                // Wait 100 milliseconds.
                Thread.Sleep(100);
                // Report progress.
                backgroundWorker1.ReportProgress(i);
            }
        }
 
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            // Change the value of the ProgressBar to the BackgroundWorker progress.
            progressBar1.Value = e.ProgressPercentage;
            // Set the text.
            this.Text = e.ProgressPercentage.ToString();
        }
    }
}
Код в дизайнере:
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
namespace WindowsFormsApplication1
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
 
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
 
        #region Windows Form Designer generated code
 
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.progressBar1 = new System.Windows.Forms.ProgressBar();
            this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
            this.SuspendLayout();
            // 
            // progressBar1
            // 
            this.progressBar1.Location = new System.Drawing.Point(12, 35);
            this.progressBar1.Name = "progressBar1";
            this.progressBar1.Size = new System.Drawing.Size(260, 23);
            this.progressBar1.TabIndex = 0;
            // 
            // backgroundWorker1
            // 
            this.backgroundWorker1.WorkerReportsProgress = true;
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(284, 262);
            this.Controls.Add(this.progressBar1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
 
        }
 
        #endregion
 
        private System.Windows.Forms.ProgressBar progressBar1;
        private System.ComponentModel.BackgroundWorker backgroundWorker1;
    }
}

После запуска ProgressBar остается неподвижным.
backgroundWorker1.WorkerReportsProgress установлен в true.

Добавлено через 1 час 52 минуты

Решение этой проблемы:

Нужно в дизайнере добавить строки в файл Form1.Designer.cs
C#
1
2
                        this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
            this.backgroundWorker1.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.backgroundWorker1_ProgressChanged);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.02.2015, 15:30
Ответы с готовыми решениями:

Остановить выполнение функции в backgroundWorker1
backgroundWorker1 запускает на выполнение функцию, которая долго считает. После выполнения кода...

Не срабатывает backgroundWorker1.RunWorkerAsync(); Не запускается DoWork
..... backgroundWorker4.RunWorkerAsync(); break; ..... В отладке после запуска...

Общее копирование файлов backgroundWorker1
Вот та код Вывести прогресс скопированных файлов private void...

Мышь работает через раз, то есть запустил ОС - мышь не работает, перезагрузил - мышь работает
Установлена Windows 7 со всеми последними обновлениями. Все всегда замечательно работало. Но с...

7
911 / 815 / 333
Регистрация: 03.02.2015
Сообщений: 5,265
Записей в блоге: 9
09.02.2015, 15:55 2
Вот пример взятый из MSDN https://msdn.microsoft.com/ru-... .100).aspx и немного изменён для Вашего любимого прогресбара. Думаю разбираться с чем либо нужно использую официальную документацию.

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
86
87
88
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace woker
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            backgroundWorker1.WorkerReportsProgress = true;
            backgroundWorker1.WorkerSupportsCancellation = true;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            progressBar1.Value = 0;
 
            if (backgroundWorker1.IsBusy != true)
            {
                // Start the asynchronous operation.
                backgroundWorker1.RunWorkerAsync();
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            if (backgroundWorker1.WorkerSupportsCancellation == true)
            {
                // Cancel the asynchronous operation.
                backgroundWorker1.CancelAsync();
            }
        }
 
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 1; i <= 10; i++)
            {
                if (backgroundWorker1.CancellationPending == true)
                {
                    e.Cancel = true;
                    break;
                }
                else
                { 
                    System.Threading.Thread.Sleep(1000);
                    backgroundWorker1.ReportProgress(i * 10);
                }
            }
        }
 
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            label1.Text = (e.ProgressPercentage.ToString() + "%");
 
            if (progressBar1.Value < progressBar1.Maximum)
                    progressBar1.Value = e.ProgressPercentage;
 
        }
 
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled == true)
            {
                label1.Text = "Canceled!";
            }
            else if (e.Error != null)
            {
                label1.Text = "Error: " + e.Error.Message;
            }
            else
            {
                label1.Text = "Done!";
            }
        }
    }
}
1
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
09.02.2015, 16:00 3
Цитата Сообщение от CSharp_user Посмотреть сообщение
Решение этой проблемы:
CSharp_user, решение состоит в том, что вы тупо скопипастили код, не понимая логики его работы, а потом думали, почему же он не работает так как должен...
0
5 / 5 / 4
Регистрация: 11.10.2014
Сообщений: 57
09.02.2015, 16:04  [ТС] 4
Цитата Сообщение от insite2012 Посмотреть сообщение
решение состоит в том, что вы тупо скопипастили код, не понимая логики его работы, а потом думали, почему же он не работает так как должен...
Ну так а есть еще какие-то способы изучать язык?
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
09.02.2015, 16:07 5
Цитата Сообщение от CSharp_user Посмотреть сообщение
есть еще какие-то способы изучать язык?
Естественно. Читать книги и выполнять те примеры что там приводятся. Разбирая теорию, без которой далеко не уедешь.
0
5 / 5 / 4
Регистрация: 11.10.2014
Сообщений: 57
09.02.2015, 16:13  [ТС] 6
Ну вот этим вроде как и занимаемся, нет?
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
09.02.2015, 17:12 7
Цитата Сообщение от CSharp_user Посмотреть сообщение
этим вроде как и занимаемся
Если бы это было так, то на месте вот этих строк
Цитата Сообщение от CSharp_user Посмотреть сообщение
Нужно в дизайнере добавить строки в файл Form1.Designer.cs
Стояло бы что-то типа:
Необходимо подключить обработчик для событий BackgroundWorker-а ProgressChanged и DoWork
И это совершенно необязательно делать именно в дизайнере.
0
5 / 5 / 4
Регистрация: 11.10.2014
Сообщений: 57
09.02.2015, 19:00  [ТС] 8
Цитата Сообщение от insite2012 Посмотреть сообщение
И это совершенно необязательно делать именно в дизайнере.
Конечно необязательно, но изначально программа создавалась с помощью дизайнера и все остальные обработчики событий добавлялись через него
0
09.02.2015, 19:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.02.2015, 19:00
Помогаю со студенческими работами здесь

Multimap STL - работает только запись в файл, поиск в файле не работает
И снова здравствуйте. Снова я прошу вашей помощи. Переделал программу с мапом в мульти мап, но что...

Так работает или не работает второй слот для оперативной памяти
Моему компьютеру уже больше 7-ми лет, купили мне его в сентября 2005 года. На то время очень даже...

не работает в ворде веб компонент,и скачав обновление ow 11 не работает все равно
проблема с веб элементами и обновлениями на них))

Swf не работает, а в тестовом режиме в самом flash и формате exe работает
Доброго времени суток. Такая проблема: есть рабочий код обмена данными с php скриптам. В тестовом...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru