首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#中listbox删除出现未将对象引用设置到对象实例解决方法

2013-12-06 
C#中listbox删除出现未将对象引用设置到对象实例using Systemusing System.Collections.Genericusing Sy

C#中listbox删除出现未将对象引用设置到对象实例
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;

namespace Error
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public void Ad(string x)
        {
            if (listBox1.Items.Count > 19)
            {
                if(!string.IsNullOrEmpty(listBox1.Items[listBox1.Items.Count - 1].ToString()))
                {
                    listBox1.Items.RemoveAt(listBox1.Items.Count - 1);
                }
               
            }
            listBox1.Items.Insert(0, x);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Thread A1;
            Thread A2;
            Thread A3;
            Thread A4;
            Control.CheckForIllegalCrossThreadCalls = false;
            A1 = new Thread(new ThreadStart(AutoPic1));
            A1.Start();
            Control.CheckForIllegalCrossThreadCalls = false;
            A2 = new Thread(new ThreadStart(AutoPic2));
            A2.Start();
            Control.CheckForIllegalCrossThreadCalls = false;
            A3 = new Thread(new ThreadStart(AutoPic3));
            A3.Start();
            Control.CheckForIllegalCrossThreadCalls = false;
            A4 = new Thread(new ThreadStart(AutoPic4));
            A4.Start();
        }
        public void AutoPic1()
        {
            for (int i = 0; i < 100; i++)
            {
                Ad(i + "");
                Thread.Sleep(200);
            }
        }
        public void AutoPic2()
        {
            for (int i = 0; i < 100; i++)
            {
                Ad(i + "");
                Thread.Sleep(200);
            }
        }
        public void AutoPic3()
        {
            for (int i = 0; i < 100; i++)
            {
                Ad(i + "");


                Thread.Sleep(200);
            }
        }
        public void AutoPic4()
        {
            for (int i = 0; i < 100; i++)
            {
                Ad(i + "");
                Thread.Sleep(200);
            }
        }
    }
}
完整代码如上,他是有时出现这问题,有时没出现,求帮助
[解决办法]
你没有线程同步,当你删除了一个,导致list数量紊乱,线程中再访问时,就会出现访问不到的情况
[解决办法]


public void Ad(string x)
{
    lock (listBox1)

热点排行