我有一个反击 - 让我们称之为:ItemsRemaining。
我会有一个动态数量的线程,但是对于这个例子,假设我有10个线程......
每个线程都将包含一个循环,并且循环中的每个迭代都执行一个工作单元,然后应该更新GUI线程上的ItemsRemaining变量。这可能是私有int,或者甚至可能是控制值。
如何从多个线程调用中准确更新此ItemsRemaining?虽然同时没有从锁定中获得太大的性能影响?
答案 0 :(得分:2)
您应该检查Interlocked类中的方法。
答案 1 :(得分:0)
我认为锁定是同步两个线程的最快方法。如果你已经在使用它,你应该很好。
答案 2 :(得分:0)
您可以使用简单锁定或Interlocked.Decrement。如果你的任何线程值得创建,我认为锁定任何东西都不会影响性能。
答案 3 :(得分:0)
如果要在变量的每个增量上更新UI,则调用使用线程中的Control.Invoke
(Winforms)或Dispatcher.Invoke
(WPF)更新UI的方法 - 并增加在更新UI之前,该方法本身的int
变量。这样就不需要锁定,因为对变量的修改会在UI线程上自动同步。
如果您不想让工作线程等待UI更新完成,您还可以使用BeginInvoke
变体。