首页 新闻 会员 周边

asp.net 一直运行一个线程。怎么实现?

0
悬赏园豆:20 [已解决问题] 解决于 2012-09-07 13:49

在网站中有一个线程希望访问一次后就一直运行

线程的处理方法如下

while(true)
{
       // do something code




      Thread.Sleep(1000);
         
}


怎么实现?需要代码 谢谢

有什么其他问题可以问,及时回复。

越天的主页 越天 | 初学一级 | 园豆:8
提问于:2012-09-07 11:48
< >
分享
最佳答案
1

global.ascx.cs:

private static Timer timer;
private static readonly object _syncLock = new object();
protected void Application_Start()
{
            if (timer == null)
            {
                lock (_syncLock)
                {
                    if (timer == null)
                    {
                        timer = new Timer(WriterFile, null, 0, 30 * 1000);                        
                    }
                }

            }
}
private void WriterFile(object state)
        {
            FileStream fs = null;
            StreamWriter sw = null;
            try
            {
                string path = @"D:\aspnet\MvcApplication5\MvcApplication5";
                fs = new FileStream( path+"\\test.txt",FileMode.Append, FileAccess.Write);
                sw=new StreamWriter(fs);
                sw.WriteLine(new Random().Next(1, 101));
            }
            catch (Exception ee)
            {

            }
            finally
            {
                if (sw != null)
                {
                    sw.Dispose();
                }
                if (fs != null)
                {
                    fs.Dispose();
                }
            }
        }
收获园豆:20
chenping2008 | 大侠五级 |园豆:9836 | 2012-09-07 13:35

经过试验会一直执行吗?

越天 | 园豆:8 (初学一级) | 2012-09-07 13:38

@越天: 不仅过测试的代码,不会贴出来,我的代码写的很全。不是随手写的。

chenping2008 | 园豆:9836 (大侠五级) | 2012-09-07 14:14

@越天: 

会有问题的,见:

http://q.cnblogs.com/q/40566/

向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-07 15:45
其他回答(2)
0

我个人认为应该不可能吧,毕竟服务端处理一个请求后就释放了所有资源,如果你的这段代码不是针对asp.net页面请求,那还用asp.net做干嘛,控制台程序,winform都可以。

 

另外有种实现方法,就是记录一个application或session(区分用户)全局变量,如果第一次访问设置它为true,,然后启动你要使用的代码,那些代码可以是其他任何程序。以后访问看到变量为true就不重复启动了

至于在哪加判断,相比你也应该知道

在日码农 | 园豆:292 (菜鸟二级) | 2012-09-07 12:28
0

把这个线程要做的事放到另一个(winform、控制台)应用程序中执行。

第一次访问这个页面的时候去调用:

[DllImport("shell32.dll ")]
public static extern int ShellExecute(IntPtr hwnd, StringBuilder lpszOp, StringBuilder lpszFile, StringBuilder lpszParams, StringBuilder lpszDir, int FsShowCmd);

ShellExecute(IntPtr.Zero, new StringBuilder("Open"), new StringBuilder("应用程序名"), new StringBuilder("参数"), new StringBuilder(System.Web.HttpContext.Current.Request.MapPath("应用程序路径")), 1);

向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-07 13:07

买得空间应该不给这么做

支持(0) 反对(0) 越天 | 园豆:8 (初学一级) | 2012-09-07 13:34

@越天: 

嗯,有可能,运行应该没问题,可以试下看是什么反应。。

支持(0) 反对(0) 向往-SONG | 园豆:4853 (老鸟四级) | 2012-09-07 13:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册