我有一个从文件加载的Visual3D对象并在屏幕上显示。这很好。我试图从SerialDataReceivedEventHandler中收到的数据中旋转它 - 这也可以正常工作。
当我尝试旋转模型时,它会抛出InvalidOperationException,因为该线程不拥有该对象。这就是我所拥有的:
QuaternionRotation3D rotation = new QuaternionRotation3D(q);
model.Dispatcher.BeginInvoke(new Action(() =>
model.Transform = new RotateTransform3D(rotation)));
我知道我需要使用调度员,但我无法弄清楚如何。
答案 0 :(得分:2)
我假设您发布的所有代码都在另一个线程中调用,因此您无法在该线程上创建QuaternionRotation3D
,有几种方法可以解决这个问题,但是没有看到其余的代码难以猜测,但其中一个选项应该有效。
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
QuaternionRotation3D rotation = new QuaternionRotation3D(q);
model.Transform = new RotateTransform3D(rotation);
}));
或者只是在MainWindow
Dispatcher.BeginInvoke(new Action(() =>
{
QuaternionRotation3D rotation = new QuaternionRotation3D(q);
model.Transform = new RotateTransform3D(rotation);
}));
或者model
是否为线程安全(没有Observables / dependancy属性)
model.Dispatcher.BeginInvoke(new Action(() =>
{
QuaternionRotation3D rotation = new QuaternionRotation3D(q);
model.Transform = new RotateTransform3D(rotation);
}));