为什么在控制台执行可以,而写到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");
}
}
}


帮忙看看怎么回事?
...全文
172 8 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
顶一下,看看 啊!
1、概述 log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。本文主要是介绍如何在Visual Studio2008中使用log4net快速创建系统日志,如何扩展以输出自定义字段。 2、一个简单的使用实例 第一步:在项目中添加对log4net.dll的引用,这里引用版本是1.2.10.0。 第二步:程序启动时读取log4net的配置文件。 如果是CS程序,在根目录的Program.cs中的Main方法中添加: log4net.Config.XmlConfigurator.Configure(); 如果是BS程序,在根目录的Global.asax.cs(没有新建一个)中的Application_Start方法中添加: log4net.Config.XmlConfigurator.Configure(); 无论BS还是CS程序都可直接在项目的AssemblyInfo.cs文件里添加以下的语句: [assembly: log4net.Config .XmlConfigurator()] 也可以使用自定义的配置文件,具体请参见4.4 关联配置文件。 第三步:修改配置文件。如果是CS程序,则在默认的App.config文件(没有新建一个)中添加内容;如果是BS程序,则添加到Web.config文件中,添加内容一样,这里不再列出。 App.config文件添加内容如下: <?xml version="1.0" encoding="utf-8" ?>
第四步:在程序使用。 log4net.ILog log = log4net.LogManager.GetLogger("testApp.Logging");//获取一个日志记录器 log.Info(DateTime.Now.ToString() + ": login success");//入一条新log 这样就将信息同时输出到控制台入到文件名为“log-file.txt”的文件中,其中“log-file.txt”文件的路径是当前程序运行所在目录;也可以定义为绝对路径,配置如: 入C盘根目录下log-file.txt文件中

62,074

社区成员

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

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

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

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