### 聊天室

Application 对象一个典型的应用就是聊天室的制作。下面就通过一个示例介绍一下。

下面示例主要利用 Application 对象实现聊天室功能。执行程序，首先应该登录聊天室，在“用户名”文本框中输入登录用户的名称，再单击【登录】按钮进入聊天室。示例运行结果如图 1 所示。

图 1 聊天室

程序实现的主要步骤：

（1）新建一个网站，添加一个全局应用程序类（即 Global.asax 文件）。在该文件的 Application_Start 事件中将在访问数初始化为 0，代码如下：

（2）新建一个网站，其主页默认为 Default.aspx，将其重命名为 Login.aspx。

（3）在该网站中添加 3 个 Web 页面：Default.aspx、Content.aspx 和 List.aspx，其中 Default.aspx 页面为聊天室的主页面，Content.aspx 页面用来显示用户的聊天信息，List.aspx 页面用来显示在线用户的列表。

（4）在该网站中添加一个 Global.asax 全局程序集文件，用来初始化 Application 对象值。

（5）程序主要代码如下。

该聊天室是使用 Application 对象实现的，在应用程序启动时，应在 Application 对象的 Application_Start 事件中将所有数据初始化。代码如下：

void Application_Start(object sender, EventArgs e)

{

// 在应用程序启动时运行的代码

//建立用户列表

string user = "";//用户列表

Application["user"] = user;

Application["userNum"] = 0;

string chats = "";//聊天记录

Application["chats"] = chats;

//当前的聊天记录数

Application["current"] = 0;

}

聊天室主页面中，单击【发送】按钮时，首先调用 Application 对象的 Lock 方法对所有 Application 对象进行锁定，然后判断当前聊天信息的记录数是否大于 20，如果大于，则清空聊天记录，并重新加载用户的聊天记录；否则，将要聊天内容、用户名、发信息时间保存在 Application 对象中。代码如下：

protected void btnSend_Click(object sender, EventArgs e)

{

int P_int_current = Convert.ToInt32(Application["current"]);

Application.Lock();

if (P_int_current == 0 || P_int_current > 20)

{

P_int_current = 0;

Application["chats"] = Session["userName"].ToString() + "说：" + txtMessage.Text.Trim() + "(" + DateTime.Now.ToString() + ")";

}

else

{

Application["chats"] = Application["chats"].ToString() + "," + Session["userName"].ToString() + "说：" + txtMessage.Text.Trim() + "(" + DateTime.Now.ToString() + ")";

}

P_int_current += 1;

Application["current"] = P_int_current;

Application.UnLock();

}

显示聊天信息页面 Content.aspx 加载时，从 Application 对象中读取保存的聊天信息，并将其显示在 TextBox 文本框中。Content.aspx 页面的 Page_Load 事件代码如下：

protected void Page_Load(object sender, EventArgs e)

{

int P_int_current = Convert.ToInt32(Application["current"]);

Application.Lock();

string P_str_chats = Application["chats"].ToString();

string[] P_str_chat = P_str_chats.Split(',');

for (int i = P_str_chat.Length - 1; i >= 0; i--)

{

if (P_int_current == 0)

{

txtContent.Text = P_str_chat[i].ToString();

}

else

{

txtContent.Text = txtContent.Text + "\n" + P_str_chat[i].ToString();

}

}

Application.UnLock();

}