Прочитал статью
Еще раз о многопоточности в Windows Forms
ничего не понял и решил попрактиковаться... Задача простая, в цикле от 0 до 99999 добавляю в listBox текст
void AddtoLb(int end, ListBox lb)
{
for(int i = 0; i < 99999;i++ )
{
lb.Items.Add("i = "+i.ToString());
}
}
В обработчике кнопки
private void button1_Click(object sender, EventArgs e)
{
}
создаю делегат вызываю синхронный метод Invoke() приложение висит, асинхронный BeginInvoke приложение висит... Thread не получаеться использовать так-как
моя функция принимает переменные... да и как я понимаю нельзя будет обратиться к листбоксу из другого потока его не создавшего... Голова уже раскалываеться =)
Может мне кто то на пальцах разъяснить как это должно работать...
Сильно не ругайте только начал изучать с#, да и программирование вообще.
P.S. Если важно у меня VS 2005 ver 8.0.50727.42 .NET ver 2.0.50727
delegate void AddtoLbHandler(int end);
Delegate m_method;
private void button1_Click(object sender, EventArgs e)
{
this.m_method = new AddtoLbHandler(this.AddtoLb);
ThreadStart ts = new ThreadStart(this.WorkerProc);
Thread thread = new Thread(ts);
thread.Start();
}
void AddtoLb(int i)
{
this.listBox1.Items.Add("i = " + i.ToString());
}
void WorkerProc()
{
while (true)
{
for (int i = 0; i < 99999; i++)
{
object[] args = new object[] { i };
this.BeginInvoke(this.m_method, args);
Thread.Sleep(10);
}
}
}
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
WorkerProc — ф-я, которую выполняет поток thread (ThreadStart содержит адрес ф-и WorkerProc).
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
> Если важно у меня VS 2005 ver 8.0.50727.42 .NET ver 2.0.50727
в FW 2.0 не надо вызывать BeginInvoke, см.
http://www.gotdotnet.ru/Downloads/Examples/221595.aspx
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение