实例化vtkCommand子时,Kitware VTK Activiz.NET InvalidCastException

时间:2016-04-21 04:35:24

标签: c# .net vtk

我有一个使用VTK的C ++程序,我试图用C#重写。我安装了以下Nuget数据包:

PM> Install-Package Activiz.NET.x86

64bit版本没有任何效果,我不明白为什么,所以我尝试安装32位版本,看起来好一点......但是,我还有一个问题:

这个简单的类继承自vtkCommand:

class VtkBoxCallback : vtkCommand
{
    public VtkBoxCallback() {}
}

当我这样做时:

VtkBoxCallback l_callback = new VtkBoxCallback();

我得到以下异常:

unhandled exception of type 'System.InvalidCastException' occurred in Kitware.VTK.dll

specified cast is not valid

任何想法为什么?

1 个答案:

答案 0 :(得分:0)

当尝试使用vtk(C ++)中使用的“主题/观察者”和“命令”设计模式来实现动画时,我遇到了相同的问题。我猜这个问题与vtkCommand是包装的类有关。我没有尝试使用相同的模式,而是使用了Activiz上添加的事件。 换句话说,不要这样做:

public class MyCommandClass : vtkCommand
{
    public MyCommandClass() { }

    public override void Execute(vtkObject caller, uint eventId, IntPtr callData)
    {
         //My callback code
    }
}

这:

vtkClass myObservedObject = new vtkClass();
MyCommandClass myCommandObject = new MyCommandClass();
myObservedObject.AddObserver((uint)vtkCommand.EventIds.Event, myCommandObject, 1f);

我这样做了

vtkClass myObservedObject = new vtkClass();
myObservedObject.Event += MyCallback;

这:

void MyCallback(vtkObject sender, vtkObjectEventArgs e)
{
    //My callback code
}