如何使用新的Dispatcher创建DispatcherObject?

时间:2013-12-08 06:43:09

标签: c# wpf multithreading dispatcher

我正在开展一个项目,我有一个DispatcherObject的多个实例 - 包含Model3D的继承类。我需要这些实例通过名为Update()的方法异步更新其模型(更改顶点,法线等)。 Update()将剥离执行某些计算并应用新顶点,法线等的线程。

模型可能具有不同的复杂性,只是将更新分派给相同的UI调度程序很慢(请参阅下面的代码示例)。此更新需要每秒发生多次(从20到500 Hz)。我想知道是否有一些简单的方法允许多个线程同时更新UI。

public void Update()
{
    Thread th = new Thread(() =>
        {
            // Do some computations to decide new vertices, normals...

            Dispatcher.Invoke(() =>
                {
                    // Apply new vertices, normals to model.
                    // Note: There could be thousands of vertices
                }
        });

    th.Start();
}

我知道将线程的单元状态设置为STA并在线程内调用System.Windows.Threading.Dispatcher.Run(),但这似乎只适用于多窗口应用程序。在我的例子中,模型在同一个Viewport3D内呈现,因此也是同一个窗口。

我还考虑在需要时使用Dispatcher.CurrentDispatcher创建新的调度程序,但这似乎不起作用。

非常感谢任何建议。感谢。

0 个答案:

没有答案