Thread newThread1 = new Thread( new ThreadStart(this.Meter1)); Thread newThread2 = new Thread( new ThreadStart(this.Meter2)); newThread1.Start(); newThread2.Start(); private void Meter1() { if (pbMeter1.InvokeRequired) { IAsyncResult result = pbMeter1.BeginInvoke(new MethodInvoker(this.Meter1)); while (!result .IsCompleted ) { Thread.Sleep(100); } pbMeter1.EndInvoke(result); } else { for (int i = 0; i < 10000; i++) { pbMeter1.Value = i; } } } private void Meter2() { if (pbMeter2.InvokeRequired) { IAsyncResult result = pbMeter2.BeginInvoke(new MethodInvoker(this.Meter2)); while (!result.IsCompleted) { Thread.Sleep(100); } pbMeter2.EndInvoke(result); } else { for (int i = 0; i < 10000; i++) { pbMeter2.Value = i; } } }