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执行很慢,所以加了数组来缓冲下。
解决方案 »
- 用C语言做一个从1开始到511*511长度的随机数列
- wpf处于什么样的地位?
- 如何得到dataGridView网格内字符位置
- 多线程下载文件请求偏移的问题
- 拖动窗体MOUSEUP怎么写,用什么方法?
- 万分火急! 关于 word 开发的问题
- DataGrid中的一条记录怎么显示数据库中的几条记录??恳求指点,内有详细说明!
- 请问如何看当前使用的.net framework的是1.1还是2.0啊?
- 怎样取得 DataGrid 中 CurrentCell 里的值啊 - 急,在线等
- 安装exe或者msi驱动能不能自动安装
- datagridview 的数据源为list不能实现自动排序
- c# SQL format写法
注意进出队列的时候lock一下
注意进出队列的时候lock一下
{
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;
}
}