Я читаю данные из файла и хотел бы добавить индикатор выполнения к этой операции.Я нашел следующий код в stackoverflow - этот код принадлежит Уильяму Дэниелу, 20 сентября, сообщению stackoverflow под названием «Как изменить цвет индикатора выполнения в C # .Net 3.5»
class CustomProgressBar : ProgressBar
{
public CustomProgressBar()
{
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
// None... Helps control the flicker.
}
protected override void OnPaint(PaintEventArgs e)
{
const int inset = 2;
using (Image offscreenImage = new Bitmap(this.Width, this.Height))
{
using (Graphics offscreen = Graphics.FromImage(offscreenImage))
{
Rectangle rect = new Rectangle(0, 0, this.Width, this.Height);
if (ProgressBarRenderer.IsSupported)
ProgressBarRenderer.DrawHorizontalBar(offscreen, rect);
rect.Inflate(new Size(-inset, -inset)); // Deflate inner rectangle
rect.Width = (int)(rect.Width * ((double)this.Value / this.Maximum));
if (rect.Width == 0) rect.Width = 1;
LinearGradientBrush brush = new LinearGradientBrush(rect,
this.BackColor, this.ForeColor, LinearGradientMode.Vertical);
offscreen.FillRectangle(brush, inset, inset, rect.Width, rect.Height);
e.Graphics.DrawImage(offscreenImage, 0, 0);
offscreenImage.Dispose();
}
}
}
}
Код работает нормальноза исключением следующего:
Градиент, кажется, не распространяется на всю ширину полосы.Он есть, но гораздо сильнее концентрируется у основания бара и очень быстро истощается, когда мы добираемся до вершины бара.Любые предложения относительно того, как я могу это исправить?
Если я помещу индикатор выполнения в форму и открою окно Internet Explorer над частью формы с индикатором выполнения на нем,часть текста из интернет-окна перетекает на индикатор выполнения в форме.Я понятия не имею, почему и как это исправить.
Кроме того, как можно оценить продолжительность операции, которую вы хотите показать через индикатор выполнения?
Любая помощь будет принята с благодарностью.Спасибо.