聊天室

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

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

                  1  聊天室

程序实现的主要步骤:

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

2)新建一个网站,其主页默认为Default.aspx,将其重命名为Login.aspx

3)在该网站中添加3Web页面:Default.aspxContent.aspxList.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();

}