我有一个使用WPF作为其GUI的应用程序,但是,一个命令启动了非常沉重的处理负载。我注意到,当引擎(繁重的处理)运行时,我的GUI相当迟钝,当使用VS2015中的"应用程序时间轴"工具时,我注意到我的一些引擎代码正在UI线程上运行。
引擎以以下行启动,如果我理解LongRunning
标志,则创建一个新线程并在该线程上运行给定的函数。
rootTask = Task.Factory.StartNew(DoWork, TaskCreationOptions.LongRunning);
上面引用的DoWork
方法重复使用Parallel.For
来排队数百个任务。
dispatcher线程是否有可能通过从TaskScheduler队列运行任务来"帮助"?如果是这样,是否有可能防止这种情况,以保持GUI响应(不惜损害后台任务)?
不,据我所知,那是不可能的。如果来自dispatcher线程是否有可能通过从TaskScheduler队列运行任务来"帮助"?
Task
的一些代码确实在调度程序线程上执行,那么这意味着任务必须在那里显式地调度它。