【提问】难题,多线程处理到底该咋用,大家进来看看

xupeihuagudulei9 2010-06-28 04:49:52
我在业务层有一个报表处理程序 ,就叫它reportprovider,里面有很多方法,诸如先读取客户端excel里的公式,然后再通过公式去实时数据库取值等等。里面很多操作。

界面层有一个reportview.aspx页面会调用到上面那个业务层,因为都是客户上传过来的excel模板然后再调用处理程序的
客户端的excel模板根本不知道会有多大,根据客户的需要来的。
一般大点的通过报表处理程序一般时间都会非常长(10多分钟以上)

现在我想客户在reportview处理报表的时候,如果超过5分钟服务器还没有处理完成的话,就提示它已经超时。

可是我现在的做法是这样的。(行不通)

我先在运行reportview 这个页面的时候创建一个datetime对象记录当前时间。比如datetime executeTime = new dateTime();

然后在调用报表处理程序的一个方法里面创建了一个System.Threading timmer
timmer 有一个回调方法定义为Timeout
timeout 定义如下


private void timeout(object state)
{
//在这里定义时间,减去前面创建的开始执行时间做判断
datespan interval = datetime.now - executeTime;
//这里判断datespan是否大于5分钟。大于的话就提示用户超时。



}


现在问题就来了。


就算提示用户超时之后,服务器的业务层reportprovider已经开始处理用户上传的excel .
我想知道如何中止这个处理程序。
多线程应该怎样写



大家不用考虑我的sqlcommand是否会超时。以及.net页面是否超时。因为我都设置了无限期时间。


现在就告诉我怎样做这个事情吧。









困扰好久了
...全文
203 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
xupeihuagudulei 2010-06-29
  • 打赏
  • 举报
回复
不是吧,那有什么办法解决我的这个问题。
我不是需要显示进度 ,需要判断执行了多少时间(这可能和实现进度的方式一样)
最主要的一点就是执行操作多少时间之后我就需要把它abort.
这咋整
Ricercar 2010-06-29
  • 打赏
  • 举报
回复
web环境不要用多线程,用了也没用,因为已经不是同一个会话了,可以用异步的方式实现
用户提交后立刻返回,相关信息保存在数据库中,然后在后台处理,这时候如果用户访问,页面就显示正在处理
,处理完了,修改状态,用户访问页面就显示处理结果
lcx7lcx7 2010-06-29
  • 打赏
  • 举报
回复
帮顶,顶一个
xupeihuagudulei 2010-06-29
  • 打赏
  • 举报
回复
myhope88 2010-06-29
  • 打赏
  • 举报
回复
不懂,帮顶下
xupeihuagudulei 2010-06-29
  • 打赏
  • 举报
回复
再顶。
yzf86211861 2010-06-29
  • 打赏
  • 举报
回复
帮顶!
qiqishardgel 2010-06-29
  • 打赏
  • 举报
回复
帮顶!
xupeihuagudulei 2010-06-29
  • 打赏
  • 举报
回复
清晨顶起。
大哥-你真棒 2010-06-29
  • 打赏
  • 举报
回复
帮顶
~~!!!
xupeihuagudulei 2010-06-29
  • 打赏
  • 举报
回复
就是刚刚那个reportview.aspx页面。
点创建报表有可能执行时间会超过十几分钟

现在判断如何执行的程序超过5分钟就提示用户超时,然后中止执行程序的线程。
阿非 2010-06-29
  • 打赏
  • 举报
回复
用文字描述一下需求
xupeihuagudulei9 2010-06-29
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 ricercar 的回复:]

web环境不要用多线程,用了也没用,因为已经不是同一个会话了,可以用异步的方式实现
用户提交后立刻返回,相关信息保存在数据库中,然后在后台处理,这时候如果用户访问,页面就显示正在处理
,处理完了,修改状态,用户访问页面就显示处理结果
[/Quote]详细点的方案有吗
xupeihuagudulei 2010-06-28
  • 打赏
  • 举报
回复
而且还有的是reportprovider.generatre(string a, string b,string c.....)

这个方法里面还会同时去调用这个方法所在类的别的方法。
同时把会string b ,string c 等参数传递给那些方法。
同时,在那些方法里面还会调用别的地方的类。。
这多线程如何控制啊?
杯具
xupeihuagudulei 2010-06-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 vip__888 的回复:]

有点麻烦啊。
不过使用sessionid记录时间也行啊,在客户端使用ajax调用时间。
你试一下。
[/Quote]不想使用ajax,我就是把原先ajax版本给改了

我现在有这么一个想法,不知道行得通行不通
通过定义一个System.Threading.Timer ;
timer 有一个事件叫calback来着吧。
在这个事件里每隔多少分钟判断服务器当前时间然后减去刚开始运行reportview.aspx时间。

然后在这个事件里提示用户超时,同时把业务层的thread 给abort.

但是我业务层的这个方法需要传递很多参数过去的。

reportprovider.generatre(string a, string b,string c.....)


我想定义一个thread去执行这个业务层方法。

不知道这样写行不行


Thread threadReport = new Thread(new ThreadStart(Start));


private void Start(string a,string b ,string c)
{
reportprovider.generatre(string a, string b,string c.....)
}

然后在threadReport.Start();

可是在reportview.aspx主线程如何判断threadReport线程里抛出来的异常或者说它返回的正确结果呢。
杯具啊。

没弄过。
vip__888 2010-06-28
  • 打赏
  • 举报
回复
有点麻烦啊。
不过使用sessionid记录时间也行啊,在客户端使用ajax调用时间。
你试一下。
十一文 2010-06-28
  • 打赏
  • 举报
回复
我来帮忙顶哈!
xupeihuagudulei 2010-06-28
  • 打赏
  • 举报
回复
杯具。
zw_548498 2010-06-28
  • 打赏
  • 举报
回复
人工帮顶
xupeihuagudulei 2010-06-28
  • 打赏
  • 举报
回复
慕 白兄写的那个是ajax方法的。
我只是普通的aspx页面。
加载更多回复(8)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧