【发布时间】:2010-04-15 09:56:01
【问题描述】:
我正在尝试从一个静态类中读取一个静态属性,该类正在从不同的线程进行修改。
基本上我有这个静态类:
public static class Progress{
public static int currentProgress{get; set;}
}
这个线程正在操纵 currentProgress:
private void Job(){
for(int i = 0; i<100; i++){
Progress.currentProgress = i;
Thread.Sleep(1000);
}
}
当它运行时,我有一个 HttpHandler 试图访问这个进度(每隔几秒),如下所示:
public void ProcessRequest(HttpContext context) {
context.Response.Write(Progress.currentProgress.toString());
context.Response.End();
}
但是 currentProgress 在这里设置为它的初始值,而 workThread 正在工作,只有在完成后,currentProgress 才会更新。
我意识到这可能是同步线程的问题 - 但我似乎无法找到完成此任务的最简单方法。请帮忙;)
【问题讨论】:
-
这应该可以。无需同步对
int的访问(除非 int 的新值是根据旧值计算得出的)。 -
您如何访问 httphandler,我假设 javascript 使用 ajax 轮询 url 以获取您的状态?还是手动刷新?
-
是的,使用 jQuery ajax 来轮询它;)
-
如果你只是增加进度,你可以使用 Interlocked.Increment 方法
-
其实我不只是递增,这只是为了简单起见,我使用总变量代替 '100' 并计算分配给 currentProgress 的百分比
标签: c# asp.net multithreading synchronization