Control .BeginInvoke 与Invoke

本文探讨了在C#中使用线程、Invoke和BeginInvoke方法时,不同方法对代码执行效率的影响,并通过实例展示了类型装箱可能导致的性能陷阱。重点在于解释这两种方法在实现并发操作时的效率区别,以及如何避免不必要的性能损耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 今天在网上看到一篇 文章,然后照着其实现 了代码,但是好像还是没有明白这两个方法的区别

        private int Max_Item_Count=1000;
        object obj = new object();

private void button2_Click(object sender, EventArgs e)
        {
            new Thread((ThreadStart)(delegate()
                {
                    for (int i = 0; i < Max_Item_Count; )
                    {            //  此处警惕值类型装箱造成的"性能陷阱"           
                        listView1.BeginInvoke((MethodInvoker)delegate()// 换为Invoke ,那么Max_Item_Count将顺序添加到列表 中,但是用BeginInvoke 则是乱的。
                        {
                            lock (obj)
                            {
                                listView1.Items.Add(new ListViewItem(new string[] { i.ToString(), string.Format("This is No.{0} item", i.ToString()) }));
                            }

                        });
                        lock (obj)
                        {
                            i+=1;
                        }
                    };
                })).Start();
        }

http://www.cnblogs.com/smartls/archive/2011/04/08/2008981.html

 

不过二者的执行 效率也有一定的差距,所以结果不一样。有时间得认真 地学学
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值