в winform есть индикатор выполнения, показывающий время, затраченное на шифрование файла c # - PullRequest
0 голосов
/ 25 августа 2011

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

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

ПОСЛЕ того, как я увидел меч-рыбу и попробовал его… вот код, который у меня есть

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

      public LockPasswordBox(IFile[] info)
    {
        InitializeComponent();
        ifile = info;

    // To report progress from the background worker we need to set this property
    backgroundWorker1.WorkerReportsProgress = true;
    // This event will be raised on the worker thread when the worker starts
    backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
    // This event will be raised when we call ReportProgress
    backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
}


// On worker thread so do our thing!
void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    // Your background task goes here
    for (int i = 0; i <= 100; i++)
    {
        // Report progress to 'UI' thread
        backgroundWorker1.ReportProgress(i);
        // Simulate long task
        System.Threading.Thread.Sleep(100);
    }
}
// Back on the 'UI' thread so we can update the progress bar
void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    // The progress percentage is a property of e
    progressBar1.Value = e.ProgressPercentage;
}

код кнопки

    private void lockButton_Click(object sender, EventArgs e)
    {
        // Start the background worker
    backgroundWorker1.RunWorkerAsync();

Проблема связана с ... после того, как я нажимаю кнопку, она просто выплывает из сообщенияуспешное шифрование коробки.

Ответы [ 2 ]

0 голосов
/ 25 августа 2011

У меня было похожее требование, и это помогло мне с моей задачей. Надеюсь, вам это тоже поможет.

http://www.codeproject.com/Tips/83317/BackgroundWorker-and-ProgressBar-demo

На самом деле все, что вам нужно сделать - это просто сообщить о прогрессе фоновому работнику, используя не столь таинственный метод reportprogress, и иметь метод для обновления индикатора выполнения при каждом сообщении о прогрессе.

Попробуйте реализовать это таким образом, и если вы столкнетесь с препятствиями, опубликуйте свой код.

0 голосов
/ 25 августа 2011

Если у вас есть Minimun = 1, Maximum = 100 и Step = 1, вам необходимо позвонить PerformStep() 99 раз, чтобы индикатор выполнения завершился.

Если вы не можете получить точную информацию от lControl.Encrypt(details) онасколько далеко зашла операция, вы не можете знать, когда нужно обновить все эти шаги на панели прогресса.

Документация MSDN содержит простой пример того, как заставить прогрессировать двигаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...