使用多线程填充Windows列表框 [英] Populate Windows List boxes using multithreading
本文介绍了使用多线程填充Windows列表框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
大家好,
我在屏幕上有2个列表框.我想在单击按钮时同时在这些列表框中填充数据.我已经写了下面的代码.这给我一个错误跨线程操作无效:控制'lst2'是从非线程访问的 在其上创建线程."
I have 2 list boxes on screen. I want to populate data in those list boxes simultaneously when button is clicked. I have written below code. It's giving me an error "Cross-thread operation not valid: Control 'lst2' accessed from a thread other than the thread it was created on."
private void PopulateList1()
{
for (int i = 0; i < 1000; i++)
{
lst1.Items.Add(i);
lst1.SelectedIndex = i;
}
}
private void PopulateList2()
{
for (int i = 0; i < 1000; i++)
{
lst2.Items.Add(i);
lst2.SelectedIndex = i;
}
}
private void btnStart_Click(object sender, EventArgs e)
{
Thread th1 = new Thread(new ThreadStart(PopulateList1));
Thread th2 = new Thread(new ThreadStart(PopulateList2));
th1.Start();
th2.Start();
}
谁能建议我该怎么做?
Can anyone suggest me how I can do it?
推荐答案
Ajinkya,
Hi Ajinkya,
您可以使用App.Current.Dispatcher.Invoke在UI线程上调用更新.
You can invoke updates on UI thread by using App.Current.Dispatcher.Invoke.
您在这里:
private void PopulateList1()
{
for (int i = 0; i < 1000; i++)
{
App.Current.Dispatcher.Invoke(() =>
{
lst1.Items.Add(i);
lst1.SelectedIndex = i;
});
}
}
private void PopulateList2()
{
for (int i = 0; i < 1000; i++)
{
App.Current.Dispatcher.Invoke(() =>
{
lst2.Items.Add(i);
lst2.SelectedIndex = i;
});
}
}
private void btnStart_Click(object sender, RoutedEventArgs e)
{
Thread th1 = new Thread(new ThreadStart(PopulateList1));
Thread th2 = new Thread(new ThreadStart(PopulateList2));
th1.Start();
th2.Start();
}
这篇关于使用多线程填充Windows列表框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文