这可能已被多次询问,但在查看所有其他问题时,我仍然无法解决我的问题。我想使用此表单上的更新功能更新表单上的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可以正常工作。使用订户更新不会做任何事情。 可能有更简单的方法来实现这一点,但我想将这种类型的结构也用于该程序的其他部分。
感谢您的建议。
答案 0 :(得分:0)
事件只能从课堂内升起。如果你能做到这一点就会破坏事件的目的。你可以从其他班级订阅这个事件。
public event EventHandler someEvent;
EventContainer obj = new EventContainer();
obj.someEvent += handler;
其中handler是根据someEvent签名的方法。一个人能够从外部订阅该事件就好了,但它只能从定义它的类中升级。