Здравствуйте, xexe2, Вы писали:
X>Control.Invoke или Control.BeginInvoke
ну вроде и все
Ну а обратно в поток как вернуться ??
если а напишу так :
partial class Form1
{
.....
delegate void MyDelegate ();
.....
}
private void f0()
{
int i=0;
while (i != 6)
{
if(label1.InvokeRequired)
{
MyDelegate d = new MyDelegate(f0);
this.Invoke(d); // здесь он перезапустит функцию f0() уже в основном потоке
}
else
{
this.label1.Text = i.ToString();
i++;
Thread.Sleep(1000); // и тогда спать я отправлю уже форму а не свой поток
}
}
}
а как сделать чтобы поток работал, периодически записывая данные в форму, но не прерывая работы. Вроде таймера. Нужно то, чтобы форма была в состоянии обрабатывать свои запросы(нажатие кнопок например), и приходящие данные с потока своевременно отображались.
Нарисованно на коленке, в связи с чем не претендует на 100% работоспособность, но на мысль навести должно...
private void btnStart_Click(object sender, EventArgs e)
{
mytread = new Thread(new ThreadStart(this.f0));
mytread.Start();
}
private void f0()
{
int i=0;
while (i != 6)
{
label.Invoke(new Delegat(SetText), i);
//this.label1.Text = i.ToString();
Thread.Sleep(1000);
}
}
void SetText(object[] param)
{
label1.Text = param[0].ToString();
}
can be done...
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение