0

我有一个从文件加载并显示在屏幕上的 Visual3D 对象。这很好用。我正在尝试从 SerialDataReceivedEventHandler 中接收到的数据中旋转它 - 这也可以正常工作。

当我尝试旋转模型时,它会引发 InvalidOperationException,因为线程不拥有该对象。这是我所拥有的:

QuaternionRotation3D rotation = new QuaternionRotation3D(q);
model.Dispatcher.BeginInvoke(new Action(() => 
           model.Transform = new RotateTransform3D(rotation)));

我知道我需要使用调度程序,但我不知道如何。

4

1 回答 1

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/dependency 属性)

model.Dispatcher.BeginInvoke(new Action(() => 
{
    QuaternionRotation3D rotation = new QuaternionRotation3D(q);
    model.Transform = new RotateTransform3D(rotation);
}));
于 2013-03-19T00:16:37.880 回答