Модераторы: Partizan, gambit
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Взаимодействия потоков, помогите разобраться 
:(
    Опции темы
xess
Дата 6.4.2007, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



Вобщем создаю класс потока и нужно из него (или с помощью его) иметь возможность изменять значение ProgressBar на форме.

Пробывал с помощью делегата:

Код

   public delegate void ThreadCallback();

    class ThreadClass
    {
        private ThreadCallback Callback;

        public ThreadClass(ThreadCallback Callback)
        {
            this.Callback = Callback;            
        }

        public void Execute()
        {
            Thread.CurrentThread.Priority = ThreadPriority.Normal;
            while (true)
            {
                if (Callback != null)
                    Callback();
                Thread.Sleep(1);
            }
        }
    }


Текст в классе формы:

Код

        public void ResultCallback()
        {
                progressBar1.PerformStep(); <------------------- тут ошибка!
        }

        private void button1_Click(object sender, EventArgs e)
        {          
            ThreadClass tc1 = new ThreadClass(new ThreadCallback(ResultCallback));           
            Thread t1 = new Thread(new ThreadStart(tc1.Execute));
            t1.Start();
        }


Вобщем там где выделил, возникает ошибка. Вкратце типа поток пытается получить доступ к ProgressBar который создан в другом потоке.

Как можно решить задачу?

Это сообщение отредактировал(а) xess - 6.4.2007, 10:37
PM MAIL   Вверх
QryStaL
Дата 6.4.2007, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 14
Всего: 32



Используй класс System.ComponentModel.BackgroundWorker.


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
HalkaR
Дата 6.4.2007, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 14
Всего: 42



xess, за это уже минусы надо ставить! Это просто издевательство какое-то! Поищи слово invoke.
PM MAIL   Вверх
mr.DUDA
Дата 6.4.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(QryStaL @  6.4.2007,  09:40 Найти цитируемый пост)
Используй класс System.ComponentModel.BackgroundWorker.

Да нет, можно и без этого решить задачу.

Код
public void ResultCallback()
{
        progressBar1.Invoke(new MethodInvoker(delegate()
        {
            progressBar1.PerformStep();
        }));
}



--------------------
user posted image
PM MAIL WWW   Вверх
xess
Дата 6.4.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 9.3.2007

Репутация: нет
Всего: нет



Цитата(HalkaR @ 6.4.2007,  10:50)
xess, за это уже минусы надо ставить! Это просто издевательство какое-то! Поищи слово invoke.

На будущее... что не так спросил или сказал?  smile А то не совсем понял ;)

Добавлено через 3 минуты и 58 секунд
Всем спасибо за советы!
PM MAIL   Вверх
ivashkanet
Дата 6.4.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



xess, я бы использовал BackgroundWorker --- отличный компонент.
Хотя способ Дуды тоже хороший (а при работе с потоками (класс Tread) -- единственный).

 smile 
xess, не волнуйся, это просто HalkaR не выспался сегодня ( smile ).
Он к тому, что эти вопросы поднимаются с периодичностью в 1-2 недели. Поэтому такая реакция.
Ты мог поискать по форуму


P.S. HalkaR без обид, у xess всего 17 сообщений


PM MAIL WWW ICQ   Вверх
HalkaR
Дата 6.4.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 14
Всего: 42



Цитата(ivashkanet @ 6.4.2007,  11:13)
P.S. HalkaR без обид, у xess всего 17 сообщений

Ну я же не поставил минуса. Просто предупредил. smile 
PM MAIL   Вверх
Exception
Дата 6.4.2007, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(xess @  6.4.2007,  11:57 Найти цитируемый пост)
На будущее... что не так спросил или сказал?  А то не совсем понял ;)


Данный вопрос задаётся с завидной периодичностью и, как ни забавно, последний раз задавался неделю назад
PM   Вверх
HalkaR
Дата 6.4.2007, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 14
Всего: 42



Цитата(ivashkanet @  6.4.2007,  11:13 Найти цитируемый пост)
xess, не волнуйся, это просто HalkaR не выспался сегодня ( smile ).
Я действительно сегодня не выспался. smile 

PM MAIL   Вверх
mr.DUDA
Дата 7.4.2007, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232




M
mr.DUDA
Развели тут флейм...
 

smile 


--------------------
user posted image
PM MAIL WWW   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0870 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.