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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2011, 18:10   #1
PrOveN
Пользователь
 
Аватар для PrOveN
 
Регистрация: 28.09.2011
Сообщений: 11
По умолчанию ProgressBar

Здравствуйте. Я, как начинающий "программист-самоучка", часто сталкиваюсь с разными проблемами (Для многих это и проблемой не покажется, а вот для меня "огого"). Обычно решение проблем нахожу в интернете, но со своей текущей проблемой справиться не смог.

Что мне нужно?
Наверно, привязать прогрессБар к потоку (Скорее всего это так)
Точнее - вот часть моего кода
Код:
        private void button3_Click(object sender, EventArgs e)
        {
            Thread th = new Thread(new ThreadStart(func));
            th.Start();
        }

        public void func()
        {
            for (int i = 0; i < Int32.Parse(textBox4.Text); ++i)
            {
                Thread.Sleep(500);
                //мой код
            }
        }
        public void ac(IAsyncResult iresult)
Тоесть, открываю программу - ввожу количество повторений кода (Int32.Parse(textBox4.Text)) - жму кнопку - программа выполняет мой код заданное количество раз. Чтобы юзер мог видеть ход выполнения, решил прикрутить прогрессБар. Перепробовал достаточно много вариантов из интернета + из головы = вышло, но не так как нужно.
Получается так - ввожу допустим 44 (44 раза повторить), в прогрессБаре доходит до 44 и всё, появляется окошко "Работа завершена".
А вот что нужно мне - если я введу 44 (44 раза повторить), прогрессБар дойдёт не до 44, а до 100 и скажет "Работа завершена".

Извеняюсь, если что-то не понятно изложил... Я старался
Очень надеюсь на вашу помощь. Заранее "Спасибо".
PrOveN вне форума Ответить с цитированием
Старый 29.09.2011, 18:46   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Как-то так:
Код:
using System;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var stcount = Int32.Parse( textBox4.Text );
            progressBar1.Minimum = 0;
            progressBar1.Value = 0;
            progressBar1.Step = 1;
            progressBar1.Maximum = stcount;
            var th = new Thread(()=>func(stcount));
            th.Start();
        }

        public void func(int steps)
        {
            for (var i = 0; i < steps; ++i)
            {
                Invoke( new Action( () => progressBar1.PerformStep() ) );
                Thread.Sleep(500);
                //мой код
            }
        }
    }
}
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 29.09.2011, 19:13   #3
PrOveN
Пользователь
 
Аватар для PrOveN
 
Регистрация: 28.09.2011
Сообщений: 11
По умолчанию

Огромное спасибо, всё работает!
Нажал на весы, добавил отзыв
PrOveN вне форума Ответить с цитированием
Старый 29.09.2011, 19:59   #4
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Пока ехал домой, подумал.. Лучше написать так:
Код:
public void func(int steps)
        {
            for (var i = 0; i < steps; ++i)
            {
                ActionGo(this, () => progressBar1.PerformStep());
                Thread.Sleep(500);
                //мой код
            }
        }
        public static void ActionGo(Control controlInvoker,Action action)
        {
            controlInvoker.Invoke(action);
        }
Получиться, что этот метод будет универсальнее, хотяа..
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ProgressBar voron.kz Общие вопросы Delphi 1 17.11.2010 18:59
Progressbar slai Компоненты Delphi 2 18.10.2010 04:36
ProgressBar DeDoK Общие вопросы Delphi 9 17.05.2010 02:51
ProgressBar Andrei Isaev Общие вопросы Delphi 1 20.11.2008 14:59
ProgressBar Rahim1993 Общие вопросы Delphi 10 20.01.2008 21:28