Nano Hash - криптовалюты, майнинг, программирование

C# динамический ProgressBar

В моей winform есть индикатор выполнения, который должен увеличиваться в зависимости от количества файлов, обрабатываемых программой. он отлично работает на одной машине (win xp), но не работает на другой (winserver 2008). К моменту завершения процесса полоса не заполняется полностью. У обоих одинаковый .net framework 3.5

private void data_process()
    {
        int progress_num = (100/checkedListBox1.Items.Count);
        .......
         progressBar1.Value = progressBar1.Value + progress_num;}

ты знаешь почему? а у вас есть лучшее решение?

------ это новый код

private void button1_Click(object sender, EventArgs e)
{
        progressBar1.Value = 0;
        richTextBox1.Clear();
        richTextBox1.Focus();
        if (checkedListBox1.CheckedItems.Count < 1)
        {
            MessageBox.Show("No file is selected", "Warning");

        }

        else
        {
            if ((region != null) && (venue != null) && (lhversion != null) && (release_version != null) && (desc != null))
            {
                progressBar1.Maximum = checkedListBox1.Items.Count + 3;
                progressBar1.Step = 1;
                //progressBar1.Value = progressBar1.Value + 10;
                progressBar1.PerformStep();
                login();
                //progressBar1.Value = progressBar1.Value + 10;
                progressBar1.PerformStep();
                data_process();
                //progressBar1.Value = progressBar1.Value + 10;
                progressBar1.PerformStep();
                if (user_in == true)
                {
                    richTextBox1.SelectionColor = Color.Blue; 
                    richTextBox1.AppendText("Done");
                }
            }

 private void data_process()
 {
            string line;
            //int progress_num = (70/checkedListBox1.Items.Count);

            foreach (object itemChecked in checkedListBox1.CheckedItems) // for each selected file
            {
                  ...
                  progressBar1.PerformStep();
            }
}
09.05.2012

  • Ну что не работает нормально? Убедитесь, что вы возвращаете управление пользовательскому интерфейсу, чтобы он мог реагировать на события и рисовать. (Длительные задачи часто выполняются в другом потоке, скажем, с помощью BackgroundWorker, который поддерживает отчеты о прогрессе.) 10.05.2012
  • Полоса не заполняется полностью к моменту окончания процесса 10.05.2012

Ответы:


1

Я попытаюсь использовать нативную команду для увеличения индикатора выполнения без расчета приращения
(что происходит, когда элементов > 100?)

progressBar1.Maximum = checkedListBox1.Items.Count;
progressBar1.Step = 1;
...
progressBar1.PerformStep();
09.05.2012
  • Я думал, что 100 должно представлять 100%. поэтому, если у вас есть 5 файлов, каждый раз, когда вы заканчиваете работу с файлом, полоса увеличивается на 20%. это не ?? 10.05.2012
  • Да, максимум будет 5, поэтому 1 шаг будет составлять пятую часть ширины индикатора выполнения. См. здесь 10.05.2012
  • Мне кажется, что вы теряете информацию о прогрессе в своем коде. Например, если в вашем списке 75 элементов, вы получите значение приращения 1,33333. Int округлит это до 1, поэтому в этом примере вы теряете одну треть элемента прогресса при каждом обновлении. Это может привести к тому, что ваш бар не будет заполнен, когда процесс будет завершен. 10.05.2012
  • @Крис. Используя логику Стива, у меня не должно быть проблем с int. Это все еще не работает. 10.05.2012
  • progressBar1.Maximum = checkedListBox1.Items.Count + 3; прогрессБар1.Шаг = 1; progressBar1.PerformStep(); авторизоваться(); progressBar1.PerformStep(); data_process(); progressBar1.PerformStep(); 10.05.2012
  • затем внутри data_process() у меня есть progressBar1.PerformStep(); 10.05.2012
  • идея в том, что всегда будет 3+N. N - количество файлов 10.05.2012
  • Просто чтобы убедиться, что это проблема обновления. После последнего PerformStep() добавьте progressBar1.Refresh(); и один Application.DoEvents(); 10.05.2012
  • Ах, вы устанавливаете Максимум для Items.Count, но вы зацикливаетесь на проверенных элементах 10.05.2012
  • @ Стив, ты ДА МУЖЧИНА! Вот и все. Теперь он работает нормально. Что меня смущает, так это то, что на одной коробке все работало, а на другой нет. одинаковое количество файлов. псих. у меня нет объяснения 10.05.2012
  • Рад быть полезным @JohnRyann. 10.05.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..