SqlDependency 监听数据出现无限刷新???
代码如下:
   
 public partial class Form2 : Form
    {
        string _connStr;        public Form2()
        {
            _connStr = ConfigurationManager.ConnectionStrings["Students"].ToString();            InitializeComponent();
        }        private void button1_Click(object sender, EventArgs e)
        {
            SqlDependency.Start(_connStr);
            UpdateGrid();
        }        private void UpdateGrid()
        {
            string sqlstr = "select * from students";
            DataTable dt = new DataTable();
            using (SqlConnection conn = new SqlConnection(_connStr))
            {
                using (SqlCommand command = new SqlCommand(sqlstr, conn))
                {
                    command.CommandType = CommandType.Text;
                    conn.Open();
                   
                    SqlDependency dependency = new SqlDependency(command);
                    dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
                    SqlDataAdapter da = new SqlDataAdapter(command);                    da.Fill(dt);
                    conn.Close();
                }
            }
            selectDataSource(dt);
        }        private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            UpdateGrid();
        }        delegate void DataSource(DataTable dt);        private void selectDataSource(DataTable dt)
        {
            if (dataGridView1.InvokeRequired)
            {
                var d = new DataSource(selectDataSource);
                Invoke(d, dt);
            }
            else
            {
                dataGridView1.DataSource = dt;
            }
        }
}

解决方案 »

  1.   

     private void UpdateGrid()        {            string sqlstr = "select * from students";            DataTable dt = new DataTable();            using (SqlConnection conn = new SqlConnection(_connStr))            {                using (SqlCommand command = new SqlCommand(sqlstr, conn))                {                    command.CommandType = CommandType.Text;                    conn.Open();                                        SqlDependency dependency = new SqlDependency(command);                    dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);                    SqlDataAdapter da = new SqlDataAdapter(command);                     da.Fill(dt);                    conn.Close();                }            }            selectDataSource(dt);        }你在这方法里面注册了dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);事件后那事件还是调用UpdateGrid方法,感觉这边有问题啊,这样会一直无限注册该事件吧……