和其他类的静态变量一样application_end的时候结束

解决方案 »

  1.   

    应该是用户关闭IE是结束,然后把静态变理K掉/
      

  2.   

    转自
    saucer(思归) ( ) 信誉:325  2003-09-27 20:58:00  得分:0 
      static members are associated with the class, not associated with threads, (otherwise, people will call them TLS, :-)), as long as the assembly in which the class belongs to is loaded or not reloaded, the static members will keep their values across requests/sessions....   
     
      

  3.   


     楼上的大哥:
     如果是关闭时结束,那我下面的代码错在哪里呢?
     下面我只列出我认为与问题相关的代码,
     我要实现的功能是动态地为DataGrid添加一行。 using System;
     using System.Collections;
     using System.ComponentModel;
     using System.Data;
     using System.Drawing;
     using System.Web;
     using System.Web.SessionState;
     using System.Web.UI;
     using System.Web.UI.WebControls;
     using System.Web.UI.HtmlControls;
     using System.Configuration; namespace  MyAspPageName
     {
          public class CheckTrainInfo : System.Web.UI.Page
    {
                   //系统生成定义页面控件代码(此处只列出关键控件的定义)
                   …………
    1              protected System.Web.UI.WebControls.DataGrid dgdTrainCheck;
    2.             protected static DataTable dt;     //我定义静态变量 dt       3              private void Page_Load(object sender, System.EventArgs e)
    4       {
     
    // 在此处放置用户代码以初始化页面
    5                          if(!Page.IsPostBack)
    6 {
    7 dt = new DataTable();
    8 DataColumn dcol = new DataColumn("No");
    9 dcol.AutoIncrement=true;
    10 dcol.AutoIncrementSeed=0;
    11 dcol.AutoIncrementStep=1;
    12 dcol.ReadOnly = true;
    13 dcol.Unique = true;
    14 dt.Columns.Add(dcol);
    15 dt.Columns.Add("CheckContent");
    16 dt.Columns.Add("CheckState");
    17 dt.Columns.Add("CheckRe");
    18
    //初始化DataGrid时显示列名
    19 DataRow drinit = dt.NewRow();
    20 drinit[1]="";
    21 drinit[2]="";
    22 drinit[3]="";
    23 dt.Rows.Add(drinit);
    24 dgdTrainCheck.DataSource = dt.DefaultView;
    25 dgdTrainCheck.DataBind();
    26 dgdTrainCheck.Items[0].Visible = false; //设第一行为不可见
    27                                    }
    28            }          …………………………         //其他事件代码,此处略去              //动态地给DataGrid--dgdTrainCheck增加一行
    29      private void btnAdd_Click(object sender, System.EventArgs e) 
    30            {
    31                  DataRow dr = dt.NewRow();
    32   dr["CheckContent"] = edtCheckContent.Value;
    33   dr["CheckState"] = edtCheckState.Value;
    34   dr["CheckRe"] = txtCheckRe.Text;
    35   dt.Rows.Add(dr);
    36   dgdTrainCheck.DataSource = dt.DefaultView;
    37   dgdTrainCheck.DataBind();
    38             }
          
           …………………………         //其他事件代码,此处略去39     }          //class结束  编译时系统提示第 31 行有错,错误信息如下所示:  Object reference not set to an instance of an object. 
      
      Description: An unhandled exception occurred during the execution of the   current web request. Please review the stack trace for more information about the error and where it originated in the code.   Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.  如果页面静态变量的生命是在页面关闭时才结束,我这Button响应事件只是引起页面的重载,那么 dt 的只仍然存在才对,错误信息却说第 31 行的dt没有实例。奇怪!!  还奇怪的是,有时后该代码能正常编译,测试时能正常实现动态地为DataGrid添加一行的效果,但有时候就出现上面的错误,我都不知道错在哪里???
      
      谢谢大家踊跃解答,否则我十一不好过了,5555555。
      

  4.   

    在一个页面下可以不用静态变量,直接public就可以了,如果在其他页面调用改变量又不想实例化,此时用public static比较合适,static的生命周期应该是application_end的时候结束