2012-10-26 76 views
1

我有麻烦了。在我的web应用程序,我有创建一个按钮的Click事件线程来执行数据密集型任务的代码中,是这样的:C#Web应用程序线程

protected void button_Click(object sender, EventArgs e) 
{ 
    // Show loader image 
    loader.Show(); 

    // Creating the thread 
    System.Threading.ParameterizedThreadStart ts = new System.Threading.ParameterizedThreadStart(RunThread); 
    Thread t = new Thread(ts); 
    t.Name = "BackgroundThread"; 
    t.Priority = ThreadPriority.AboveNormal; 
    t.Start(HttpContext.Current); 
} 
private void RunThread(object state) 
{ 
    // Setting the current thread property as the background thread 
    CurrentThread = Thread.CurrentThread; 

    if (IsThreadRunning(CurrentThread)) 
    { 
     CurrentThread.Join(TimeSpan.FromMinutes(6d)); 
    } 

    // DO SOME HEAVY STUFF 
} 

在点击该按钮i显示了装载机。问题是:即使呼叫加入BackgroundThread,Page_Load事件被频繁调用,使页面刷新。换句话说,虽然RunThread没有完成,Page_Load正在调用。我可以防止这种情况发生吗?

OBS:我想要做的是:在数据密集型线程运行时显示加载器,而不在页面上进行重复刷新。

+1

不要调用'page_load'的高优先级线程吗?如果你解释这个试图解决什么问题,也许可以提供一个更好的选择。 – Oded

+0

请让你的问题更清楚,你想做什么? – Anri

+0

你为什么要在当前线程上调用'Join'?这是一个毫无意义的操作。 –

回答

1

从网页检查长时间运行的任务状态而不进行轮询(不定时回发)的唯一方法是使用Web套接字,但我确信使用它会对这类任务造成很大的开销。

我会使用ajax请求来防止整个页面重新加载。

似乎你需要阅读更多关于整个Web请求和响应过程。

+0

简而言之,我想在长时间运行的任务结束之前禁止将页面送达客户端。它就像一个长期运行的线程上的Join。但即使我打电话加入,该页面遵循他的正常周期,并获得送达客户端。 –

+0

你不能在主线上做这项工作吗?您也可能会遇到超时。 – Anri

+0

发生了一些奇怪的事情!当我将webapp部署到我公司的临时服务器上时,上述问题(频繁刷新)淡出。似乎只是因为应用程序在调试模式下运行才发生。 –