我最近在另一个线程中提出了这个问题(Reed Copsey 亲切地回答)但我觉得我没有很好地提出这个问题。
我的问题的核心是,我想举例说明如何获得 访问正在获取/设置的数据。
我有 Page.aspx.cs,并且在代码隐藏中,我有一个循环:
List<ServerVariable> files = new List<ServerVariable>();
for (i = 0; i <= Request.Files.Count - 1; i++)
{
m_objFile = Request.Files[i];
m_strFileName = m_objFile.FileName;
m_strFileName = Path.GetFileName(m_strFileName);
files.Add(new ServerVariable(i.ToString(),
this.m_strFileName, "0"));
}
//CODE TO COPY A FILE FOR UPLOAD TO THE
//WEB SERVER
//WHEN THE UPLOAD IS DONE, SET THE ITEM TO
//COMPLETED
int index = files.FindIndex(p => p.Completed == "0");
files[index] = new ServerVariable(i.ToString(),
this.m_strFileName, "1");
“ServerVariable”类型获取和设置 ID、File 和 Completed。
现在,我需要向用户显示文件上传“进度”(实际上, 循环将 ServerVariable 项添加到 列出完成状态从 0 更改为 1 的时间。
现在,我有一个 Web 服务方法“GetStatus()”,我想要 用于将文件列表(上面创建的)作为 JSON 字符串返回(通过 jQuery)。完成状态为 0 的文件仍在进行中, 带有 1 的文件已完成。
我的问题是 - GetStatus() 内部的代码是什么样的?如何 我是否在填充列表时查询列表 实时返回结果?我被告知我需要锁定 我查询时的工作过程(设置 ServerVariable 数据) GetStatus() 返回的值然后解锁同一进程?
如果我能很好地解释自己,我会很感激的代码说明 GetStatus() 中的逻辑。
感谢您的阅读。
查看this有关多线程锁的链接。
您需要在读和写状态下锁定该对象。