Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2010, 18:20   #1
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
Вопрос BackgroundWorker, сообщение о прогрессе выполнения операции

Всем привет! Не могу сделать, чтобы BackgroundWorker сообщал о процессе выполнения операции в ProgressBar, сделал небольшой тестовый проект, помогите пожалуйста, кто в курсе как сделать, чтобы сообщал BackgroundWorker в ProgressBar. Вот мой код:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BackgroundWorker_ShowProgress
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.backgroundWorker.WorkerReportsProgress = true;
            this.backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
            this.backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged);
        }

        //нажатие по кнопке "Запустить фоновую операцию"
        private void btnRunBackground_Click(object sender, EventArgs e)
        {
            if(!this.backgroundWorker.IsBusy)
            this.backgroundWorker.RunWorkerAsync();
        }

       //помоему это вообще не выполняется, ставил точку останова, не останавилось выполнение тут
        private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.progressBar1.Value = e.ProgressPercentage;
        }

        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            this.RunOperation();
        }

        private void RunOperation()
        {
            int ZZZ = 2000000000;
            for (int i = 0; ZZZ > 0; i++)
            {
                ZZZ--;
            }
            MessageBox.Show("ZZZ = " + ZZZ.ToString());
        }
    }
}

Последний раз редактировалось Casper-SC; 29.05.2010 в 06:18.
Casper-SC вне форума Ответить с цитированием
Старый 28.05.2010, 19:31   #2
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

у воркера есть метод ReportProgress(), как раз он вызывает событие ProgressChanged и отправляет ему какие-то данные(% работы например)
дальше думаю разберешься )
m0nax вне форума Ответить с цитированием
Старый 28.05.2010, 20:02   #3
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Цитата:
Сообщение от m0nax Посмотреть сообщение
у воркера есть метод ReportProgress(), как раз он вызывает событие ProgressChanged и отправляет ему какие-то данные(% работы например)
дальше думаю разберешься )
Ну в общем тут то понятно, я ещё и видео урок по BackgroundWorker'у уже успел посмотреть. Так это самому надо получается расчитывать процент выполнения. На примерах то ясно, там в цикле делают расчёт именно для примера. Немного озадачивает, то что надо самому процент выполнения высчитывать. Например при отправке каких либо файлов на хостинг по FTP, ну есть смутное представление как это сделать, думаю там надо как-то считать по количеству отправленных байт.
Casper-SC вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
во время выполнения макроса вывести сообщение о загрузке данных mars56 Microsoft Office Excel 9 18.03.2010 17:27
Остановка выполнения Artanis Общие вопросы C/C++ 1 20.12.2009 18:13
Где можно найти много примеров по потокам и особенно по компоненту backgroundworker? Neymexa Общие вопросы .NET 1 16.05.2009 03:34
backgroundworker Neymexa Общие вопросы .NET 3 06.05.2009 17:13