2015-07-23 4 views
2

Это мой первый раз с индикатором выполнения. Я не могу видеть индикацию выполнения в моем индикаторе выполнения. Я написал следующий код.Winforms Progress bar работает некорректно

using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      progressBar1.Maximum = 1000000; 
      progressBar1.Value = 0; 
      progressBar1.Step=10; 
      Int64 i = 10000000000; 
      while (i != 1) 
      { 
       i = i/10; 
       System.Threading.Thread.Sleep(1000); 
       progressBar1.Increment(10); 
      } 
     } 
    } 
} 

Я не вижу никакого прогресса, показанного в моем индикаторе выполнения. Пожалуйста, дайте мне решение

+4

Блокировка основной переднего плана не кажется мне очень хорошей идеей. –

+1

@UweKeim Правда, но я предполагаю, что Shruti просто хочет протестировать базовый API для отображения и обновления индикатора прогресса здесь, поэтому, вероятно, это не так важно в этом контексте. – Kjartan

ответ

2

максимум Try из 100;)

С/10 вы не делают 100000 (1000000/шаг 10) работает. вы сделаете 10;)

+0

Хорошо. Он работает с пропорциональными значениями. Спасибо :) – Shruti

1

Ваше основное использование индикатора выполнения правильное, но есть кое-что странное относительно некоторых из ваших других значений. Фактически, ваш код будет работать частично, но цикл завершится до завершения индикатора выполнения (мои быстрые вычисления показывают, что для заполнения полоски потребуется около 28 минут, даже если ваша петля продолжалась, хотя!))

Другими словами, вы, вероятно, просто не видели изменения в индикаторе выполнения, потому что это было так мало!

Небольшая модификация может немного улучшить пример и показать индикатор выполнения, работающий по назначению (и немного быстрее, чем исходный код).

private void button1_Click(object sender, EventArgs e) 
    { 
     progressBar1.Maximum = 10; // Smaller number of steps needed 
     progressBar1.Value = 0; 
     progressBar1.Step = 1; 
     Int64 i = 10000000000; 
     while (i != 1) // This will require 10 iterations 
     { 
      i = i/10; 
      System.Threading.Thread.Sleep(1000); 
      progressBar1.Increment(1); // one step at a time 
     } 
    } 
+0

Большое спасибо за четкое объяснение. я ценю вашу помощь – Shruti