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();
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]
Цитата: 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;
}
}
if(lbl.InvokeRequired) {
lbl.Invoke(new ThreadStart(delegate {
SetLabelText(lbl, text);
}));
} else {
lbl.Text = text;
}
}
Код:
Control.CheckForIllegalCrossThreadCalls = false;