private List<Model> models = new List<Model>();        public void updateModel(model)
        {
            models.Add(model);
            if (isOpen)
            {
                Thread thread = new Thread(UpdateModels);
                thread.Start();
                isOpen = false;
            }
        }        private void UpdateModels()
        {
            while (flag)
            {
                if (models != null)
                {
                    if (models.Count > 50)
                    {
                        UpdateModelsStatus(models);
                        models.RemoveRange(0, 49);
                        isUpdate = true;
                    }
                    else
                    {
                        if (isUpdate && models.Count > 0)
                        {
                            UpdateModelsStatus(models);
                            models.RemoveRange(0, models.Count - 1);
                            isUpdate = false;
                        }
                    }
                }
            }
        }
updateModel方法会一直被调用,所以MODELS数组的值会越来越多,因为UpdateModelsStatus方法会执行一段时间,所以我加了线程,不然会阻塞的,线程里,如果MODELS的COUNT每大于50就会更新一次,这样就可以吧所有传来的MODEL都更新掉,但是如果小于50的时候,models.RemoveRange(0, models.Count - 1);如果在这个地方MODELS有添加新的MODEL,那么它的COUNT和传入方法的MODELS就会不一样(UpdateModelsStatus(models);),这样就会少更新一个或多个,这个该怎么解决?求高手
注:原来UpdateModelsStatus的方法传入的是一个MODEL,因为updateModel执行太快,但是UpdateModelsStatus执行很慢,所以加了数组来缓冲下。

解决方案 »

  1.   

    用队列吧,主线程入队,再开一个线程处理队列。
    注意进出队列的时候lock一下
      

  2.   

    用队列吧,主线程入队,再开一个线程处理队列。
    注意进出队列的时候lock一下
      

  3.   

    这样就行了        public void updateModel(Model model)
            {
                models.Add(model);
                if (isOpen) {
                    if (models.Count > 50) {
                        Thread thread = new Thread(mds => {
                            UpdateModelsStatus(mds as List<Model>);
                        });
                        thread.Start(new List<Model>(models));
                        models.Clear();
                    }
                    isOpen = false;
                }
            }
      

  4.   

    还有数组CLEAR的时候,不会添加新的数据吗?