public class RSensor : IRSensor
{
public RSensorType SensorType { get; protected set; }
public event EventHandler ConnectionLost;
public void Configure(Stream input, Stream output, RSensorType type, ISensorReciever reciever)
{
throw new NotImplementedException();
}
public RSensor()
{
}
}
我有一个类RSensor
,它有一个EventHandler ConnectionLost
,会在连接断开时通知我。
我有另一个类ConnectionManager
,在连接断开时需要以某种方式处理。我创建了一个虚函数void HandleConnectionLost()
在这堂课上。当触发EventHandler ConnectionLost
类RSensor
时,如何触发此功能。
public class ConnectionManager
{
ActiveList m_ActiveList;
Dictionary<IRionSensor, VSManager> m_ConnectionManager;
class VehicleStreamManager
{
public IVehicle Vehicle { get; set; }
public NetworkStream AStream { get; set; }
public NetworkStream BStream { get; set; }
}
ConnectionManager(ActiveExercise exercise)
{
m_ActiveList = exercise;
m_ConnectionManager = new Dictionary<IRSensor, VehicleStreamManager>();
}
void Connect()
{
List<VehicleStreamManager> vsmList;
VehicleStreamManager vsm;
vsm = InitiateAVehicleConnections();
m_ConnectionManager.Add(null, vsm);
vsmList = InitiateBVehicleConnections();
foreach(var item in vsmList)
{
RSensor fsensor = new RSensor();
fsensor.Configure(item.AStream, item.BStream, RSensorType.RSensor_Both, null);
m_ConnectionManager.Add(fsensor, item);
}
}
void HandleConnectionLost()
{
//Do some stuff
}
}
}
答案 0 :(得分:1)
您需要稍微重新定义HandleConnectionLost
处理程序,以使其符合EventHandler
签名:
void HandleConnectionLost(object sender, EventArgs args)
{
// Do stuff here
}
然后,在实例化传感器的ConnectionManager
循环中,您需要连接事件处理程序:
foreach(var item in vsmList)
{
RSensor fsensor = new RSensor();
fsensor.Configure(item.AStream, item.BStream,
RSensorType.RSensor_Both, null);
fsensor.ConnectionLost += HandleConnectionLost;
m_ConnectionManager.Add(fsensor, item);
}
这样,只要其中一个传感器失去连接,就会触发处理程序。
您没有显示执行此操作的代码,但您说ConnectionLost
事件会在连接断开时通知我。我认为这意味着存在已经引发事件的代码。如果没有,请告诉我,我将扩展这个例子。
但是,传感器必须依赖某种类型的连接丢失外部通知 - 它可能依赖于较低级别的基础架构。