WPF高度并发跨线程UI访问

Cod*_*gry 4 .net c# wpf multithreading

在C#中,我有几个工作,我需要将其反映到UI中.更新进度条,将项添加到列表等.

我第一次尝试这样做时,我用锁来准备一切,以确保每个给定时刻只有一个线程访问UI,但我得到了一个例外.所以我了解到我需要使用它Dispatcher.Invoke来访问和更改UI元素.将每个UI更改包含在调用中是非常麻烦的,但我可以处理它.

我的问题:

  • 是否有必要同步Dispatcher.Invoke呼叫或内部完成?所以我想知道我是否需要用锁添加另一层保护......
  • 它是否会影响排队到调度员的许多更新请求的性能?因此,如果多个线程工作并且每个线程都通过一个小的更改反映到UI中,那么对Dispatcher.Invoke`发出许多调用会如何影响性能?我应该使用计时器并且每秒只更新一次UI并在内部对所有UI更改进行排队吗?
  • 是否有更简单的方法来进行跨线程访问更内联...没有调用?

Luc*_*ski 7

人脑将无法处理200次更新/秒.这只会减慢你的用户界面,而不会让你获得任何东西.

相反,制作一个计时器,每次轮询状态,比如200ms.这将足够快(5次更新/秒)不明显.

无需锁定调度程序,它在内部处理.但是你应该将你的任务专门用于计算,而不是从他们那里操纵UI.像我说的那样实现一个计时器,并使用一些标准的跨线程通信方式从UI线程中检索当前状态.