我有一个方法 myobj_EndInteractionEvt 在事件发生时执行
在大班我注册如下:
//on main class register method passing args like
lo.myobj.EndInteractionEvt += (s, args) => updateInteraction(lo.myobj_EndInteractionEvt(s, args));
//this is called when finish executin "lo.myobj_EndInteractionEvt"
public void updateInteraction(AOItour tour)
{
Console.WriteLine(tour.StateOfAOItour );
ClearMsg();
etc...
}
在myobj类中,我调用 myobj_EndInteractionEvt ,返回一个对象 AOItour
internal AOItour myobj_EndInteractionEvt(vtkObject losender, vtkObjectEventArgs e)
{
//do stuff and return AOItour
return AOItour;
}
这是有用的(主要是因为我正在使用 vtk ,这需要使用大量的回调),问题来自myobj有另一个回调 angleEndInteractionEvt 在内部更新AOItour
public void angleEndInteractionEvt(vtkObject sender, vtkObjectEventArgs e) {
//AOItour has been modified, so i would like to call own "myobj_EndInteractionEvt"
// so I can pass
// modified AOItour to it and then myobj_EndInteractionEvt would return AOI to
// updateInteraction
}
如何在 angleEndInteractionEvt 结束时调用回调 myobj_EndInteractionEvt ?
我试过了
public void angleEndInteractionEvt(vtkObject sender, vtkObjectEventArgs e) {
//some stuff
myobj_EndInteractionEvt(sender,e);
}
它正确地转到myobj_EndInteractionEvt,但问题是在执行之后,程序返回到angleEndInteractionEvt并且没有去 updateInteraction 如何做到这一点?
答案 0 :(得分:1)
myobj_EndInteractionEvt
是一种方法,而不是一种事件。您需要触发在主类中调用它的事件,而不是直接调用myobj_EndInteractionEvt(sender,e);
。因此,请将angleEndInteractionEvt
更改为:
public void angleEndInteractionEvt(vtkObject sender, vtkObjectEventArgs e) {
//some stuff
EndInteractionEvt(sender, e);
}
答案 1 :(得分:1)
您需要触发您已连接的事件。理解你的结构有点困难但通常你会在你定义事件的班级中这样做:
public class MyObj
{
public void angleEndInteractionEvt(vtkObject sender, vtkObjectEventArgs e) {
// Do stuff
if(EndInteractionEvt != null) {
EndInteractionEvt(sender, e);
}
}
}
但通常情况下,发件人应此 - 触发事件的实例。
此时,以下行将开始发挥作用:
lo.myobj.EndInteractionEvt += (s, args) => updateInteraction(lo.myobj_EndInteractionEvt(s, args));
首先将调用myobj_EndInteractionEvt方法,该方法应该返回AOITour。
internal AOItour myobj_EndInteractionEvt(vtkObject losender, vtkObjectEventArgs e)
{
//do stuff and return AOItour
return AOItour;
}
然后应该将结果传递给我在下面列出的updateInteraction,这样你就可以开始记录了。
public void updateInteraction(AOItour tour)
{
Console.WriteLine(tour.StateOfAOItour );
ClearMsg();
etc...
}
可能更好,更具可读性(如果它们是在同一个对象上定义的)则只需执行以下操作:
public void angleEndInteractionEvt(vtkObject sender, vtkObjectEventArgs e) {
// Do stuff
this.myobj_EndInteractionEvt(sender, e);
if(EndInteractionEvt != null) {
EndInteractionEvt(sender, e);
}
}