2013-06-13 3 views
0

Я новый программист для C#, и мне нужна помощь. Я много искал, но я не нашел простого примера. Пожалуйста, смотрите код ниже:Winforms Progress Bar update

public partial class Welcome : Form 
{ 
    public Welcome() 
    { 
     InitializeComponent(); 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
     Compare comp = new Compare(); 
     comp.Comparator(); 
    } 
} 

В CompareClass У меня есть простой метод, который содержит простой цикл:

public class Compare 
{ 
    public void Comparator() 
    { 
     for (int i;i<val;i++) 
     { /* ............. */ } 
    } 

} 

Я хочу, чтобы обновить ProgressBar параллельно с приростом стоимости i.

+4

Рассмотрим 'BackgroundWorker' резьб: http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx. Он имеет встроенные механизмы для выполнения работы и отчетности о ходе работы в пользовательском интерфейсе. – DonBoitnott

+4

Этот вопрос задан [много раз] (http://stackoverflow.com/questions/1697168/progress-bar-c-sharp). [Серьезно] (http://stackoverflow.com/questions/1068720/winforms-progress-bar-does-not-update-c). [Много] (http://stackoverflow.com/questions/1470927/c-sharp-winform-progressbar-and-backgroundworker). [Пожалуйста, по крайней мере, выполните поиск в Google] (http://stackoverflow.com/questions/1259949/how-do-implement-a-progress-bar-in-c). [Спасибо] (http://stackoverflow.com/questions/7546222/adding-a-progress-bar) –

ответ

1

Вы сказали, что искали много ... где? Это самые тривиальные вещи, с очень хорошо описаны примеры в MSDN

в методе BackgroundWorker_doWork:

Parallel.For(0, val, i => 
{ 
    ... 
    backgroundWorker.ReportProgress(0); 
}); 

в методе BackgroundWorker_reportProgress:

wf.progressBar.Value=wf.progressBar.Value + 1; 

в главном конструктору формы

public Welcome() 
{ 
    InitializeComponent(); 
    Compare.wf=this; 
} 

в

public class Compare 
{ 
    static Welcome wf; 
    public void Comparator() 
    { 
     backgroundWorker.RunWorkerAsync(); 
    } 
} 
+0

Достаточно уверен, что индикатор выполнения находится на главной форме. Ваше решение не сообщит об этом в вызывающую форму. – Sayse

+0

Теперь он сообщает. –

0

Простой способ сделать это:

 public class Compare 
    { 
     public void Comparator() 
     { 
      progressBar.Value = 0; 
      progressBar.Maximum = val; 
      progressBar.Step = 1; 
      for (int i;i<val;i++) 
      { 
       /* ............. */ 
       progressBar.PerformStep(); 
      } 
     } 
    }