Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Потоки и их действия

40K
26 июня 2008 года
ANONE-Babay
1 / / 26.06.2008
И так, путём чтения лит-ры и работы ручками пришли вот к чему

 
Код:
public void MoveB()        
{            label5.Text="ДА";        }      
public void MoveA()      
{          
             for(i=10;i<20;i++)            
                {                Console.WriteLine("{0}",i);             }        
}

А создание и запуск потоков
 
Код:
MainForm b0=new MainForm();  
MainForm b1=new MainForm();  
ThreadStart t0,t1;    
t0=new ThreadStart(b0.MoveB);  
t1=new ThreadStart(b1.MoveA);    
Thread th0,th1;  
th0=new Thread(t0);    
th1=new Thread(t1);      
th0.Start();  
th1.Start();

Запускается этот код по нажатию кнопки "Новый забег"

А теперь вопрос... Почему у меня не срабатывает Label5.Text="Да" хотя поток точно запускается..... Помогите плз... Может что-то где то надо прописать... Заранее спасибо..

[COLOR="DarkRed"]Оформляйте код тегами. WBR, Sanila_san[/COLOR]
5
27 июня 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: ANONE-Babay
Почему у меня не срабатывает Label5.Text="Да"

Потомучто lablel - это компонента на форме, а к свойствам компонентов можно обращаться только из потока, которому принадлежит компонент. Для всех остальных случаев нужно пользоваться методом Invoke, для синхронизации.
Пример:

 
Код:
private SetLabelText(Label lbl, string text) {    
    if(lbl.InvokeRequired) {
        lbl.Invoke(new ThreadStart(delegate {
            SetLabelText(lbl, text);
        }));
    } else {
        lbl.Text = text;
    }
}
12K
27 июня 2008 года
lifs
163 / / 06.09.2007
не очень правильный вариант, но более простой:
 
Код:
Control.CheckForIllegalCrossThreadCalls = false;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог