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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Cross-Threading 
V
    Опции темы
andrx
Дата 2.6.2006, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


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

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



Добрый день!

Подскажите пожалуйста, как в vs2005 работать с потоками на примере кода для vs2003
( этот код работает в vs2003, а в vs2005 - ну никак smile   ) :   
(смотрел материалы винграда, но проблему пока не решил
Cross-Threading, Никак не догоню...  (VisualProgrammerNET)
)

Код

private void button1_Click(object sender, System.EventArgs e)
        {
            Thread t = new Thread(new ThreadStart(this.run));
            t.Start();
        }
        private void run()
        {
            this.progressBar1.Value = 0;
            for(int i=0; i<100; i++)
            {
                Thread.Sleep(100);
                this.progressBar1.Increment(1);
            }
        }
 
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
Prehistorik
Дата 2.6.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не... ну ясно... Они назвали это unsafe кодом. Посмотри в MSDN пример специальный... Там всё описано.... 
--------------------
Есть только один бог - Ассемблер, и С - пророк его. 
PM MAIL   Вверх
andrx
Дата 2.6.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


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

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



Prehistorik
можешь ссылку дать ? 
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
Wanderer2019
Дата 2.6.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

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



Цитата(andrx @  2.6.2006,  15:21 Найти цитируемый пост)
private void button1_Click(object sender, System.EventArgs e)
        {
            Thread t = new Thread(new ThreadStart(this.run));
            t.Start();
        }
        private void run()
        {
            this.progressBar1.Value = 0;
            for(int i=0; i<100; i++)
            {
                Thread.Sleep(100);
                this.progressBar1.Increment(1);
            }
        }

попробуй там где делаешь this.progressBar1.Increment(1)
вызывать что то типа:
Код

private void AddOne()
        {
             this.progressBar1.Increment(1);
        }
delegate void AddOneMethodDelegate();
if(this.progressBar1.InvokeRequired)
                {
                    this.progressBar1.Invoke(new AddOneMethodDelegate(this.AddOne));
                }
                else
                    this.AddOne();
 
PM ICQ MSN   Вверх
-ser-
Дата 2.6.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



почитай про BackgroundWorker class 


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
andrx
Дата 2.6.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


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

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



Всем спасибо за участие!
-ser-
Обязательно ознакомлюсь BackgroundWorker class

Wanderer2019
Спасибо ! заработало.

Вот код (может кому-нибудь пригодится) :
Код

private void button1_Click(object sender, System.EventArgs e)
        {
            Thread t = new Thread(new ThreadStart(this.run));
            t.Start();
        }        
        private void run()
        {
            if(this.progressBar1.InvokeRequired)
                {
                    this.progressBar1.Invoke(new AddOneMethodDelegate(this.AddOne));
                }
                else this.AddOne();
        }
        private void AddOne()
        {
            this.progressBar1.Value = 0;
            for (int i = 0; i < 100; i++)
            {
                Thread.Sleep(100);
                this.progressBar1.Increment(1);
            }
        }
        delegate void AddOneMethodDelegate();
 

Уважаемые модераторы, извините за беспокойство, но поставте пожалуйста + Wanderer2019 

Это сообщение отредактировал(а) andrx - 2.6.2006, 16:28
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
-ser-
Дата 2.6.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



или то же самое покороче, что-то вроде этого
Код

this.progressBar1.Invoke( ( MethodInvoker )delegate { this.progressBar1.Increment(1); });

но я бы разобрался и переписал через BackgroundWorker 
 


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
andrx
Дата 2.6.2006, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Андрей
*


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

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



-ser-
спасибо за совет ! попробую 
--------------------
Лучше скажи мало, но хорошо. (Козьма Прутков)
PM MAIL ICQ   Вверх
Ch0bits
Дата 2.6.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

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



Цитата(andrx @  2.6.2006,  16:22 Найти цитируемый пост)
поставте пожалуйста + Wanderer2019

Влепил по репе smile  
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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