private static System.Windows.Forms.ListView _listView1;
       public static System.Windows.Forms.ListView listView1
       {
           get
           {
               return _listView1;
           }
           set
           {
               _listView1 = value;
           }
       }
public static void StartThread(int t)
{
            ParameterizedThreadStart myDelegate = new ParameterizedThreadStart(main);
            Thread dd = new Thread(myDelegate);
            dd.IsBackground = true;
            dd.Start(t);
}
public static void main(object o)
       {int t=int.Parse(o);
 for(int i=t;i<t+10;i++){
 listView1.Items[0].SubItems[0].Text = i.ToString();
 System.Threading.Thread.Sleep(1000);
}         
       } 多线程调用StartThread时给listView赋值会发送串位,比如listView1 本来应该是1~9 ;listView2应该是10~19;
可如果同时执行StartThread(0);StartThread(10);listView1里面就不见得是1~9了,可能后面的那个函数StartThread(10)赋值给了listView1 。请问这个如何解决亚?请贴代码,谢谢

解决方案 »

  1.   

    不对,仔细看了你的代码,没明白你的listView2到底从哪里来的?还有你是如何多次启动StartThread的。
    你应该是传入的参数哪里不正确。
      

  2.   

    object obj=new object();
    lock(obj)
    {
    listView1.Items[0].SubItems[0].Text = i.ToString();
    }
      

  3.   

    本来来说我以为是因为多线程同时写入一个 listView从而导致顺序上有问题。但我看了一下你的代码似乎是多线程写入各自的listView,这在你的代码中并没有提供,所以我暂时无法看出问题在哪里。如果是我猜测的原因,你则只需要在某个线程执行的过程中锁定Listview对象即可。
    在线程的执行函数中:
    lock(listView)
    {
       for(int ....)
    }
      

  4.   

    好像是有问题,我把代码简化了,大体就是这个意思
    listview是作为线程的参数传递的