使用多线程填充Windows列表框 [英] Populate Windows List boxes using multithreading

查看:89
本文介绍了使用多线程填充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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆