Как мне сделать так, чтобы progressBar1 выполнялся каждый раз к тому времени, когда я установил интервал таймера на?

#c# #.net #winforms

#c# #.net #winforms

Вопрос:

У меня есть этот метод, который я вызываю с пометкой таймера:

 private void NewsUpdate()
{
    counter  = 1;

    progressBar1.Value = counter * 10;
    progressBar1.Value = counter;

    label9.Text = counter.ToString();
    label9.Visible = true;

    if (counter == 10)
    {
        client.Encoding = System.Text.Encoding.GetEncoding(1255);
        page = client.DownloadString("http://rotter.net/scoopscache.html");
        TextExtractor.ExtractDateTime(page, newText, dateTime);

        StreamWriter w = new StreamWriter(@"d:rotterhtmlrotterscoops.html");
        w.Write(page);
        w.Close();

        TextExtractor.ExtractText(@"d:rotterhtmlrotterscoops.html", newText, dateTime);
        combindedString = string.Join(Environment.NewLine, newText);
        counter = 0;
    }
}
  

Значение progressBar1 установлено от 0 до 100.

Я хочу, чтобы, если я сделаю:

 if (counter == 10)
  

Затем progressBar1 он переместится в конец через 10 секунд.

Если я установлю его равным 50, то это 50 секунд, поэтому progressBar1 он должен двигаться 50 секунд до конца.

timer1 В конструкторе установлено значение 1000 мс

Например, теперь так оно и есть:

 counter  = 1;

progressBar1.Value = counter * 10;
progressBar1.Value = counter;

label9.Text = counter.ToString();
label9.Visible = true;

if (counter == 10)
  

Он будет считать до 10 progressBar1 , переместится на 10, а затем вернется к началу.

Я хочу, чтобы, если я изменю его на 10 50 или 33 progressBar1 , он будет знать, что нужно двигаться до конца в соответствии с подсчитанными секундами.

Если его 33, то посчитайте 33 и переместите значение progressBar1 в конец через 33 секунды.

Что я хочу сделать, так это то, что если я установлю IF == 10, то ProgressBar увеличится на 10 секунд * 10 шагов, так что за 10 секунд ProgressBar дойдет до 100 до конца. Затем снова (этот таймер является обновлением, он должен продолжать работать все время, я не хочу его останавливать, я просто проверяю, прошло ли 10 секунд для обновления. И я также хочу, чтобы ProgressBar увеличивался в соответствии с пределом, который я установил в данном случае 10, до конца. Если его == 10, то ProgressBar должен увеличиваться каждую секунду на 10. И если я установлю для него значение == 50, например, тогда ProgressBar должен увеличиваться на 2 каждые секунды

Комментарии:

1. С кем вы хотите сделать progressBar1.Value = counter * 10; progressBar1.Value = counter; ?

Ответ №1:

Вам нужен счетчик с n шагами, где n — количество секунд до завершения.

К этому можно подойти двумя способами:

  1. (Предпочтительно) Установите Maximum свойство ProgressBar . Это сделает все автоматическим!

     counter  ;
    progressBar1.Maximum = 33; //This could be set in the designer, or on init
    progressBar1.Value = counter;
      
  2. Рассчитайте интервал самостоятельно. Сделайте это, разделив счетчик на общее количество секунд, а затем умножив на диапазон (в данном случае 100).

     counter  ;
    progressBar1.Value = (int)Math.Round((counter / 33f) * 100);
      

Весь ваш остальной код звучит нормально, основываясь на вашем комментарии.

Комментарии:

1. @user3739928 Спасибо за разъяснения, надеюсь, мой новый ответ поможет! Возможно, вы захотите включить этот комментарий в свой вопрос для будущих читателей.