HttpWebResponse ,timeout i progressbar

0

Witam.

Mam watek,w watku taki oto kawalek kodu

                       WebProxy proxy = new WebProxy(temproxy, true);

                       request.Proxy = proxy;

                        request.Timeout = 20000;

                        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                        Stream streamResponse = response.GetResponseStream();

                        StreamReader streamRead = new StreamReader(streamResponse);
                        string responseString = streamRead.ReadToEnd();

Chciałbym zrobić , by oczekiwanie na odp z serwera było jakos wyswietlanie, np w progressbar.
Przez te 20sek progress by sie zapelnial do 100%

I co teraz? jakies pomysly?

0

Drugi watek podepnij pod progress bara i odliczaj 20s na nim.

0

czyli na chlopski rozum ;p eh..juz myslalem ze da rade to prosciej zrobic ;)

ok , thx. ;) juz sobie poradzilem

0

No i kolejny problem;)

Zrobiłem watek.


                        timeouter tim = new timeouter(oid, tablica);
                        tim.Start();

                        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                        Stream streamResponse = response.GetResponseStream();

                        StreamReader streamRead = new StreamReader(streamResponse);
                        string responseString = streamRead.ReadToEnd();

                        tim = null;

Watek wywolywany


...

        public void Start()
        {
            Thread t = new Thread(new ThreadStart(dawaj));
            this.t = t;
            t.Start();
        }

        public void dawaj()
        {
            int a=0;
            while(koniec!=false)
            {
                a = a + 1;
                System.Threading.Thread.Sleep(1000);
                asd[1, nr].Value = a;
            }

        ~timeouter()
        {
            asd[1, nr].Value = 0;
        }

        ....

Moze kod jest troszke niepoprawny ale to wyniklo z kombinatoryki (:

I problem jest taki ze.. watek jest wywolywany, wtedy jest czekanie do timeouta, w tym czasie watek dodaje kolejne wartosci do progresssbara, gdy strona sie wczyta ,watek powinien sie zniszczyc,wyzerowac cokolwiek... ale... no nie wiem jak,albo mi sie nie udaje.

Progressbar sie zeruje! i leci od nowa, lecz widac w tle z poprzedniego watku wartosci! jak by watek nie znikal ,a dzialal dalej... i tak naklada sie jeden na drugi watek, w zaleznosci od progressbara..

jak to powstrzymac?

0

A gdzie ustawiasz zmienna koniec, zeby zakonczyc watek?

0

Koniec ustawiam za

string responseString = streamRead.ReadToEnd();

tim.Stop();

        public void Stop()
        {
      
            koniec = false;
           t.Abort();
        }

ale taki efekt jaki jest...
co najlepiej zastosowac?Zrobic?

0

A do czego to abort? Mozesz w samym watku ustawic czas wylaczenia, np.

private DateTime Started;
private Timeout;
public void Start(int iTimeout)//timeout w ms
{
Thread t = new Thread(new ThreadStart(dawaj));
this.t = t;
t.Start();
Started = DateTime.Now;
Timeout = iTimeout;
}

    public void dawaj()
    {  TimeSpan Difference;
        while((Difference = (DateTime.Now - Started)).Milliseconds < Timeout)
        {
            progress = Difference.Seconds;//czy jakkolwiek ustawiasz progresa
            System.Threading.Thread.Sleep(500); //zwiekszamy dokladnosc
        }

Cos w tym stylu, watek wylaczy sie po uplywie timeotu. A watek spi tylko 0.5 sek, zeby troche zwiekszyc dokladnosc  - sleep (1000) nie gwarantuje dokladnie sekundy oczekiwania.

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