为什么在控制台执行可以,而写到Global.asax不行??

lxiron 2010-01-04 04:58:13
我写了两个定时执行任务的计时器,为什么在控制台是都可以正常执行而,到了Global.asax就不行了呢 ,源代码如;

Global文件里的:

<script runat="server">

void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
//这个计时器可以正常执行
System.Timers.Timer myTimer = new System.Timers.Timer();
myTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
myTimer.Interval = 1000;
myTimer.AutoReset = true;
myTimer.Enabled = true;


//下面这个线程执行不成功,只能执行一次
AutoResetEvent autoEvent = new AutoResetEvent(true);
TimerCallback timerDelegate = new TimerCallback(RequstMyPage);
System.Threading.Timer startTimer = new System.Threading.Timer(timerDelegate,autoEvent,0,1000*60*3);
}
private static void RequstMyPage(object state)
{
string url = "http://localhost:4015/ATPSystem/Default.aspx";
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流
//指定日志文件的目录

string fileLogPath = AppDomain.CurrentDomain.BaseDirectory + "SystemLogRequst";
string fileLogName = "SoftPrj_CN_" + DateTime.Now.ToLongDateString() + "_log.txt";
//定义文件信息对象

FileInfo finfo = new FileInfo(fileLogPath + fileLogName);

//创建只写文件流

using (FileStream fs = finfo.OpenWrite())
{
//根据上面创建的文件流创建写数据流

StreamWriter strwriter = new StreamWriter(fs);
strwriter.BaseStream.Seek(0, SeekOrigin.End);
//写入错误发生时间

strwriter.WriteLine("请求页面发生时间: " + DateTime.Now.ToString());
//写入日志内容并换行

//strwriter.WriteLine("错误内容: " + message);

strwriter.WriteLine("错误内容: ");
//写入间隔符

strwriter.WriteLine("---------------------------------------------");
strwriter.WriteLine();
//清空缓冲区内容,并把缓冲区内容写入基础流

strwriter.Flush();
//关闭写数据流

strwriter.Close();
fs.Close();
}

}
private static void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
{

//间隔时间执行某动作
//指定日志文件的目录
string fileLogPath = AppDomain.CurrentDomain.BaseDirectory + "SystemLog";
string fileLogName = "SoftPrj_CN_" + DateTime.Now.ToLongDateString() + "_log.txt";
//定义文件信息对象
FileInfo finfo = new FileInfo(fileLogPath + fileLogName);
//创建只写文件流
using (FileStream fs = finfo.OpenWrite())
{
//根据上面创建的文件流创建写数据流

StreamWriter strwriter = new StreamWriter(fs);
strwriter.BaseStream.Seek(0, SeekOrigin.End);
//写入错误发生时间

strwriter.WriteLine("定时检查发生时间: " + DateTime.Now.ToString());
//写入日志内容并换行

//strwriter.WriteLine("错误内容: " + message);

strwriter.WriteLine("错误内容: ");
//写入间隔符

strwriter.WriteLine("---------------------------------------------");
strwriter.WriteLine();
//清空缓冲区内容,并把缓冲区内容写入基础流

strwriter.Flush();
//关闭写数据流

strwriter.Close();
fs.Close();
}
}
</script>


控制台程序两个都可以正常执行

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Timers;
using System.Threading;
namespace TimerTest
{
class Program
{
private static System.Timers.Timer aTimer;
static void Main(string[] args)
{
aTimer = new System.Timers.Timer(1000);

aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.AutoReset = true;
aTimer.Enabled = true;

AutoResetEvent autoEvent = new AutoResetEvent(false);
StatusChecker statusChecker = new StatusChecker(10);
TimerCallback timerDelegate =
new TimerCallback(statusChecker.CheckStatus);

Console.WriteLine("{0} Creating timer.\n",
DateTime.Now.ToString("h:mm:ss.fff"));
System.Threading.Timer stateTimer =new System.Threading.Timer(timerDelegate, autoEvent, 0, 5000);
Console.ReadLine();
}
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
Console.WriteLine(System.DateTime.Now);
Console.WriteLine("Time Thread going");

}
}
class StatusChecker
{
int invokeCount, maxCount;

public StatusChecker(int count)
{
invokeCount = 0;
maxCount = count;
}
public void CheckStatus(Object state)
{
Console.WriteLine( DateTime.Now.ToString("h:mm:ss")+"another Theard");
}
}
}


帮忙看看怎么回事?
...全文
199 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jshi123 2010-01-05
  • 打赏
  • 举报
回复
对于System.Threading.Timer, 在使用的期间必须保持对其的引用,否则会被GC回收。
参见MSDN System.Threading.Timer类的说明
http://msdn.microsoft.com/en-us/library/tb9yt5e6.aspx
hongjiaoli 2010-01-05
  • 打赏
  • 举报
回复
也有可能是配置文件的问题
lxiron 2010-01-04
  • 打赏
  • 举报
回复
不明白4楼这样写是什么意思[Quote=引用 4 楼 wuyq11 的回复:]
void Application_Start(object sender, EventArgs e)
    {
        System.Timers.Timer t= new System.Timers.Timer();
      t.Interval = 1000;
      t.Enabled = true;
    }
   
    void Application_End(object sender, EventArgs e)
    {
        Thread.Sleep(1000);
    }
    private static void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
    {}
[/Quote]
vip__888 2010-01-04
  • 打赏
  • 举报
回复
wuyq11 2010-01-04
  • 打赏
  • 举报
回复
void Application_Start(object sender, EventArgs e)
{
System.Timers.Timer t= new System.Timers.Timer();
t.Interval = 1000;
t.Enabled = true;
}

void Application_End(object sender, EventArgs e)
{
Thread.Sleep(1000);
}
private static void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
{}
zhujiazhi 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xianao16888 的回复:]
timer在IIS中不行
用线程试一试,thread.sleep(100);
[/Quote]
Timer 在IIS里面是可以用的。。。
夏脑 2010-01-04
  • 打赏
  • 举报
回复
timer在IIS中不行
用线程试一试,thread.sleep(100);
lxiron 2010-01-04
  • 打赏
  • 举报
回复
顶一下,看看 啊!

62,243

社区成员

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

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

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

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