我对多线程没有多少经验,所以我想知道如何刷新我的数据网格视图,例如两秒钟。
基本上,当用户在某个选项卡上并且他们选择了“当前导入”时,它应该每隔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);
}
}
}
答案 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的用武之地。它允许非常方便地访问后台线程而无需复杂的同步。