C# 如何使用新的Dispatcher创建DispatcherObject?

C# 如何使用新的Dispatcher创建DispatcherObject?,c#,wpf,multithreading,dispatcher,C#,Wpf,Multithreading,Dispatcher,我正在从事一个项目,其中我有一个DispatcherObject继承类的多个实例,该类包含一个Model3D。我需要这些实例通过名为update()的方法异步更新其模型(更改顶点、法线等)Update()将派生一个线程,该线程执行一些计算并应用新的顶点、法线等 这些模型的复杂性可能会有所不同,简单地将更新分派到同一个UI分派器是很慢的(请参见下面的代码示例)。此更新需要每秒发生多次(20到500 Hz)。我想知道是否有一些简单的方法可以让多个线程同时更新UI public void Update

我正在从事一个项目,其中我有一个
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
来创建新的Dispatcher,但这似乎不起作用


任何建议都将不胜感激。谢谢。

我的猜测是否定的。因为UI工作是在单个线程上执行的,所以没有简单的方法。但是,您可以在不同的线程上进行计算,然后使用一些管道机制将要执行的计算操作传递给GUI线程。当我需要更新UI时,问题就出现了。我已经通过调度员传达了更改。根据我到目前为止读到的内容,似乎没有办法让多个UI线程(以及多个Dispatcher)更新同一个窗口……从多个线程更新GUI会有什么好处?我的想法是,您可能希望对GUI的一些请求进行优先级排序,或者意识到它们可能由于其他线程的计算而冗余。