Полоска ничего не измеряет, она просто повторяет значение от 0 до заданного максимума. Когда индикатор выполнения достигнет максимального значения, диалоговое окно должно закрыться автоматически. Проблема, с которой я столкнулся, заключается в том, что диалоговое окно всегда закрывается, когда полоса достигает примерно 90 процентов.
После ответа пользователя «Скоро Луна» в этом сообщении SO я закодировал свой Диалоговое окно индикатора выполнения следующим образом:
Код: Выделить всё
public partial class ProgressBar : Form
{
public System.Windows.Forms.ProgressBar Progressbar { get { return this.progressBar1; } }
public ProgressBar()
{
InitializeComponent();
}
public void RunAsync(Action action)
{
Task.Run(action);
}
}
Код: Выделить всё
private void showProgressBar()
{
ProgressBar prog = new ProgressBar();
prog.Progressbar.Value = 0;
prog.Progressbar.Maximum = 200;
prog.RunAsync(() =>
{
for (int i = 0; i < prog.Progressbar.Maximum; i++)
{
Thread.Sleep(1);
prog.Progressbar.BeginInvoke((MethodInvoker)(() =>
{
prog.Progressbar.Value += 1;
//close the dialog when value equals maximum
if (prog.Progressbar.Value == prog.Progressbar.Maximum)
{
prog.Close();
prog.Dispose();
}
}));
}
});
prog.StartPosition = FormStartPosition.CenterParent;
prog.ShowDialog();
}
Что такое Я делаю неправильно?
Подробнее здесь: https://stackoverflow.com/questions/785 ... n-winforms