下面为线程中的部分代码,同时最多可有10个线程,先锁定ListView对象,然后取出第一行数据付给变量并删除此行,如果没有数据了就跳出循环(外层有个循环遍历ListView所有行)然后就结束锁定让其它线程可以操作ListView对象,现在出现问题就是1个线程没有问题,如果有多个线程,最后没有数据的时候总是有1个线程无法退出来,请大家帮我看看我的思路和方法对不对,谢谢
System.Threading.Monitor.Enter(this.ListView);
if(this.ListView.Items.Count>0)
{
s_tel = this.ListView.Items[0].SubItems[0].Text;
s_info = this.ListView.Items[0].SubItems[1].Text;
this.ListView.Items.RemoveAt(0);
}
else
{
break;
}
System.Threading.Monitor.Exit(this.ListView);

解决方案 »

  1.   

    对于你的函数来说else中的部分没有任何作用,去掉试试。
      

  2.   

    Knight94(愚翁) 
    我的else中的break是用来跳出外层while循环的
      

  3.   

    to 我的else中的break是用来跳出外层while循环的那你有些线程没有正常释放monitor。
      

  4.   

    have a try!
    if(this.ListView.Items.Count>0)
    {
    System.Threading.Monitor.Enter(this.ListView);
    s_tel = this.ListView.Items[0].SubItems[0].Text;
    s_info = this.ListView.Items[0].SubItems[1].Text;
    this.ListView.Items.RemoveAt(0);
    System.Threading.Monitor.Exit(this.ListView);
    }
    else
    {
    break;
    }
      

  5.   

    我也怀疑是没有释放,我修改了一下
    finally
    {
    System.Threading.Monitor.Exit(this.ListView);
    }
    这样感觉可以了,不过手机设备不在,晚上回家测试谢谢 Knight94(愚翁)