每隔n秒调用一次存储过程

时间:2011-12-12 10:17:20

标签: c# .net sql multithreading timer

我对多线程没有多少经验,所以我想知道如何刷新我的数据网格视图,例如两秒钟。

基本上,当用户在某个选项卡上并且他们选择了“当前导入”时,它应该每隔n秒调用一个方法GetNotImportedFiles(),然后该方法调用SP并绑定DataSet。

显然,我需要一个计时器,它会每隔n秒执行一次,但我需要它作为后台工作程序执行该方法,但是与UI线程通信以更新DataGridView。

如果您需要任何代码,请询问。

更新:我已经实现了一个计时器,但它似乎永远不会触及timerTick的方法?

在我的设计师中,我有代码:

this.refreshTimer.Interval = 1000;
this.refreshTimer.Tick += new System.EventHandler(this.refreshTimer_Tick);

我的理解是每1秒钟应调用refreshTimer_Click。但我在代码中有一个从未命中的断点?

private void refreshTimer_Tick(object sender, EventArgs e)
    {
        if (searchComboBox.Text.Equals("Currently Importing"))
        {
            try
            {
                DataSet temp = EngineBllUtility.GetNotImportedFiles(connectionString);
                if (temp != null)
                    importFileGridView.DataSource = temp.Tables[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }

2 个答案:

答案 0 :(得分:5)

利用:Timer in C#允许在每个计时器滴答后查询数据...您可以访问链接以获取有关计时器的更多详细信息。

Timer myTimer = new Timer(500);
timer1.Interval = 5000;
timer1.Enabled = true;
timer1.Tick += new System.EventHandler (OnTimerEvent);

Write the event handler

This event will be executed after every 5 secs.

public static void OnTimerEvent(object source, EventArgs e)
{
m_streamWriter.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),DateTime.Now.ToLongDateString());
m_streamWriter.Flush();
}

答案 1 :(得分:0)

使用Timer每n秒启动一次操作,使用BackgroundWorker进行SP的异步调用。仅使用Timer控件不会创建后台线程操作。这就是BackgroundWorker的用武之地。它允许非常方便地访问后台线程而无需复杂的同步。