Progressbar nie zmienia sie.

0
 using System;
using System.Windows.Forms;
using System.Net;
using System.Diagnostics;
using System.IO;
using System.ComponentModel;

namespace updater
{
    public partial class Main : Form
    {
        WebClient webclient = new WebClient();

        public Main()
        {           
            InitializeComponent();         
        }

        private void Main_Load(object sender, EventArgs e)
        {
            Download_new_version();
        }

        private void Download_new_version()
        {
            try
            {
                webclient.DownloadFileCompleted += new AsyncCompletedEventHandler(Download_Completed);
                webclient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
                webclient.DownloadFileAsync(new Uri(Uri.EscapeUriString("http://www.google.pl/plik.exe")),"plik_new.exe");               
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }

        private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            progressBar.Value = e.ProgressPercentage;
        }

        private void Download_Completed(object sender, AsyncCompletedEventArgs e)
        {
            if (!IsProcessOpen("Plik"))
            {
                try
                {
                    File.Delete("plik.exe");
                }
                catch (SystemException systexc)                
                {
                    MessageBox.Show(systexc.ToString());
                }

                if (!File.Exists("plik.exe"))
                {
                    try
                    {
                        File.Move("plik_new.exe", "plik.exe");   
                        System.Diagnostics.Process.Start("plik.exe");
                        this.Close();
                    }
                    catch (SystemException systexc)
                    {
                        MessageBox.Show(systexc.ToString());
                    }
                }
                else { }
            }
            else { }
        }

        public bool IsProcessOpen(string name)
        {
            foreach (Process clsProcess in Process.GetProcesses())
            {
                if (clsProcess.ProcessName.Contains(name))
                {
                    return true;
                }
            }
	        return false;
        }

    }
}

Taki mały programik który pobiera nowa wersje innego programu, usuwa stara i uruchamia nowa :). Problem z tym ze na progres barze nie wyświetla się postęp pobierania. Czy to wina tego ze pobierany program zajmuje tylko ok. 120kb, a łącze za szybkie?

ustawienia progressbar'u:
min: 0
max: 100
step: 10
style: blocks

0

Jak szybko się pobiera ?
Mniej, niż sekundę ?

0

No tak gdzieś kolo sekundy własnie, ale powinien chociaż przelecieć ten pasek na progress barze.

0

Posprawdzaj ProgressMesages (jeżeli w .NET jest takie coś)

Chyba to:
Application.DoEvents

0

Gdy pobieram większy plik coś kolo 5MB to wszystko jest ok; progress bar dobrze pokazuje, wiec nic z tym nie zrobię ze przy małych plikach nie zdarzy się zapełnić ;/

0

Możesz spróbować pobierać plik synchronicznie i używać BackGroundWorkera do obsługi ProgressBara: http://www.devtoolshed.com/content/c-download-file-progress-bar

1 użytkowników online, w tym zalogowanych: 0, gości: 1