在ASP.NET中我们有时会访问文件,但我们如果不想让代码每次都重新读取文件内容的话,我们可以使用FileSystemWatcher,这在有些情况是是很不错的选择,以下代码演示如何在ASP.NET中使用FileSystemWatcher来监控文件目录,以及在这种监控方式下IIS如何管理Appdomain以及Thread。
首先,我们利用Application_Start事件来在整个Application中创建唯一的FileSystemWatcher实例,并设置关联的监听方法,在监听方法中我们重新读取文件夹信息,并保存在Application变量中。
Global.asax
<%@ Application Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Threading" %>
其次,我们创建一个页面来显示保存在Application变量中的文件夹等的信息,以验证FileSystemWatcher是否起效。
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>title>
head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="File list:">asp:Label>
div>
<asp:ListBox ID="lstFile" runat="server" Width="583px">
asp:ListBox>
<br />
<asp:Label ID="Label2" runat="server" Text="Event list:">asp:Label>
<br />
<asp:ListBox ID="lstEvent" runat="server" Width="579px">
asp:ListBox>
form>
body>
html>
Default.aspx.cs
using System;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
lstFile.DataSource = Application["FileList"];
lstFile.DataBind();
lstEvent.DataSource = Application["EventList"];
lstEvent.DataBind();
}
}