C#在此Form类

时间:2016-02-22 11:51:31

标签: c# forms events delegates

这可能已被多次询问,但在查看所有其他问题时,我仍然无法解决我的问题。我想使用此表单上的更新功能更新表单上的Datagridview。更新功能由订户调用。

概述:

static class MainClass
{
    static void Main()
    {

        // The Main form is called.
        MainForm = new frmMain();
        Application.Run(MainForm);

        //Application.Run(new frmMain());
    }

}

代表

public delegate void Delagate_UpdateDataView();

订阅发布商的订阅者,每500毫秒发布一次事件。

public class SubscriberFrmMain
{
   // Constructor
    public SubscriberFrmMain()
    {

    }

    // Subscribe to the Publisher

    public void Subscribe(PublisherTimedEvent mUpdateHMIData)  
    {
        //attach listener class method to publisher class delegate object

        mUpdateHMIData.TickUpdateHMIData += UpdateHMIData;
    }

    // The Event, fired when the Publisher raises an event.

    private void UpdateHMIData(PublisherTimedEvent mUpdateHMIData,EventArgs e)   
    // Calling the Update function on the Form MainForm.
    {
        MainClass.MainForm.Process_UpdateDataView(new
        Delagate_UpdateDataView(MainClass.MainForm.UpdateDataView));
    }

}

表格中的更新功能

    public void Process_UpdateDataView(Delagate_UpdateDataView update)
    {
        update();

    }


    public void UpdateDataView()
    {

        try
        {
            TagTableAdapter.Fill(uDataSet.PLC_Tag);
        }
        catch
        {

        }
    }

手动更新TagTableAdapter可以正常工作。使用订户更新不会做任何事情。 可能有更简单的方法来实现这一点,但我想将这种类型的结构也用于该程序的其他部分。

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

事件只能从课堂内升起。如果你能做到这一点就会破坏事件的目的。你可以从其他班级订阅这个事件。

public event EventHandler someEvent;
EventContainer obj = new EventContainer(); 
obj.someEvent += handler;

其中handler是根据someEvent签名的方法。一个人能够从外部订阅该事件就好了,但它只能从定义它的类中升级。