110,533
社区成员
发帖
与我相关
我的任务
分享
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;
}
}
}
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方法,感觉这边有问题啊,这样会一直无限注册该事件吧……