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的一些请求进行优先级排序,或者意识到它们可能由于其他线程的计算而冗余。