从逻辑层中的类更新UI层中的表单?

时间:2013-12-08 11:00:49

标签: c# architecture

我是使用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

但我不知道在哪里。 如果您有其他解决方案而不是使用活动,请成为我的客人! 提前谢谢。

1 个答案:

答案 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];
    }