我是使用3层架构的新手。我有一个带有dataGridView的表单,我有一个具有计时器的Logic类。表单正在运行逻辑类的实例。计时器每10秒触发一次。我被告知我应该使用事件,但我不知道它是如何工作的。现在,计时器运行,并且每十秒运行一次onUpdated方法。这是逻辑类的计时器:
public void timerTick(object sender, EventArgs e)
{
t.Interval = 1000;
t.Enabled = true;
if (counter >= 10)
{
counter = 0;
OnUpdated();
}
else
{
counter++;
}
}
然后它运行OnUpdated:
protected void OnUpdated()
{
if (Updated != null) Updated();
}
我希望逻辑层在表单中运行此方法。此方法获取数据库中的当前表。
private void dataGridViewUpdate()
{
dsCitizen.Clear();
dsTemp.Clear();
dataGridView1.DataSource = null;
dataGridView2.DataSource = null;
dsCitizen = lInst.getDataSetCitizen();
dsTemp = lInst.getDataSetTemporary();
dataGridView1.DataSource = dsCitizen.Tables[0];
dataGridView2.DataSource = dsTemp.Tables[0];
}
我确定我应该在某处运行
lInst.Updated += Update; //lInst is an instance of my logic class in the form
但我不知道在哪里。 如果您有其他解决方案而不是使用活动,请成为我的客人! 提前谢谢。
答案 0 :(得分:2)
计时器Tick
本身就是一个事件,因此您无需处理其他事件。您可以在dataGridViewUpdate
事件中调用方法timerTick
。在事件之外设置t.Interval = 10000
(即10秒),您不需要使用该计数器变量。
private Timer t ;
private void Form1_Load(object sender, EventArgs e)
{
t = new Timer();
t.Interval = 10000;
t.Tick += new EventHandler(timerTick);
t.Start();
}
public void timerTick(object sender, EventArgs e)
{
dataGridViewUpdate();
}
private void dataGridViewUpdate()
{
dsCitizen.Clear();
dsTemp.Clear();
dataGridView1.DataSource = null;
dataGridView2.DataSource = null;
dsCitizen = lInst.getDataSetCitizen();
dsTemp = lInst.getDataSetTemporary();
dataGridView1.DataSource = dsCitizen.Tables[0];
dataGridView2.DataSource = dsTemp.Tables[0];
}