首页 > 解决方案 > 有什么方法可以在不使用计时器的情况下每 5 或 3 秒刷新一次列表视图?

问题描述

我有一个在另一台笔记本电脑上运行的表格,这是厨房一侧,在我的 POS (也在另一台笔记本电脑上运行)一侧购买后,所有订单都将在这里处理。

现在我在厨房一侧的列表视图在“使用计时器”5 秒后刷新,是否有任何选项或方法可以在不使用计时器的情况下刷新列表视图,以便在我选择列表视图中的项目时“焦点”不会消失?

这是我的代码:

public Kitchen()
{
    InitializeComponent();

    listView2.Columns.Add("ORDERS", 800);

    listView2.View = View.Details;
    System.Windows.Forms.Timer timer_1 = new System.Windows.Forms.Timer();
    timer1.Interval = 5000;
    timer1.Tick += new System.EventHandler(timer1_Tick);
    timer1.Start();
} 

private void dinein(String tblnmber)
{
    String[] row = { tblnmber };

    listView2.Items.Add(new ListViewItem(row));
} 

public void loaddinein()
{
    listView2.Items.Clear();
    string sq = "select tblnmber as [ORDERS] FROM Kitchen Group By tblnmber";

    cmd = new SqlCommand(sq,con);

    try
    {
        con.Open();

        adp = new SqlDataAdapter(cmd);
        adp.Fill(dt);

        foreach (DataRow row in dt.Rows)
        {
            dinein(row[0].ToString());
        }

        con.Close();
        dt.Rows.Clear();
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message);
        con.Close();
    }
}  

private void timer1_Tick(object sender, EventArgs e)
{
    loaddinein();
}

标签: c#sql-serverwinformslistview

解决方案


连续池化到数据库服务器不是一个好方法,您可以选择两种方法中的任何一种。

  1. 使用 trigger to 引发更改消息MSMQ,并订阅 MSMQ新消息。有关实施的更多详细信息,您可以在此处查看
  2. 使用 监控数据更改SqlDependency,有关更多详细信息,您可以在此处查看

注意:这两种方法都有自己的优点/缺点。例如,如果侦听器的数量更多,那么 SQL Dependency 会影响性能。


推荐阅读