2012-09-14 112 views
2

我开发了一个可以处理数据的应用程序(在我的例子中是对视频执行的图像算法)。我开发了不同的ProcessingMethod s。多线程更新多个ProgressBars

有时几个视频并行处理。每个进程运行在一个单独的线程中。

我有几个ProgressBar S,一个用于处理数据的每个线程的GUI。

什么是更新ProgressBar的好办法?

目前,我的GUI是创建所有处理线程,每个线程一个ProgressBar。然后我将这些ProgressBar s传递给线程,这些线程将它们传递给ProcessingMethod。然后ProcessingMethod将更新ProgressBar(使用Invoke())。

我有不同的ProcessingMethod秒。在每种方法中,我都有复制粘贴代码来更新ProgressBar。虽然我是一个编程新手,但我知道复制粘贴并不好。

什么是使其更好的好方法?

+0

请给我们的代码,我确定这将是不到一分钟的工作,重构它ü – nawfal

回答

3

创建一个名为UpdateProgressBar方法,将采取一个进度条和它作为参数值和Invoke包更新。您将使用不同的参数调用单个函数来替换您的复制粘贴。

+1

顺便说一句,人谁是新的编程应尽量从多线程代码了。如果没有牢牢掌握基本技术,我无法想象如何找出竞争条件。 – zmbq

+0

鉴于您需要在UI线程中更新进度条(只有一个),它将消除大多数所有竞争条件。 – Servy

+0

这将消除进度条竞争条件,而不是视频处理竞争条件... – zmbq

0

检出BackGroundWorker组件。它旨在通过安全回调来执行GUI中的线程以获取进度指示信息。