Laden...

Während langlaufender Aktion sollen das GUI laufend aktualisiert werden

Erstellt von marc75 vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.281 Views
Thema geschlossen
M
marc75 Themenstarter:in
43 Beiträge seit 2010
vor 13 Jahren
Während langlaufender Aktion sollen das GUI laufend aktualisiert werden

Hallo

habe folgendes Problem.

Ich habe eine Inetseite wo ich alle Links auslese und sie anschließend in eine ListBox schreibe. Dann sollen die Links abgearbeitet werden und die Informationen in ein Datagridview geschrieben werden.

Erst fängt die ListBox an und nach einiger Zeit erscheinen die Informationen im Datagridview.

Ich möchte aber das im Datagridview die Informationen Zeile für Zeile sichtbar werden und nicht erst wenn alle Links abgearbeitet sind.

Vielleicht habt ihr ja eine Idee wie ich das ändern kann und somit die Performence besser wird.

private void button1_Click(object sender, EventArgs e)
        {
            this.url = "http://www.............";
           

            //Webseite laden
            WebRequest req = WebRequest.Create(this.url);

            WebResponse resp = req.GetResponse();

            Stream stream = resp.GetResponseStream();

            StreamReader sr = new StreamReader(stream);

            string s = sr.ReadToEnd();

            this.HTML = s;
            
            ArrayList a = new ArrayList();
            Regex javascript = new Regex("script type=\\\"text/javascript\\\"\\>(?<Brutto>[^\\>]*)", RegexOptions.Singleline);
            string java = javascript.Match(this.HTML).Value;

            Regex trefferliste = new Regex("http://www([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;]*)?", RegexOptions.IgnoreCase);
            MatchCollection mcl = trefferliste.Matches(java);

            foreach (Match ml in mcl)
            {

                a.Add(ml);
                listBox1.Items.Add(ml);
                listBox1.SelectedIndex = listBox1.Items.Count - 1;
               this.url = listBox1.SelectedItem.ToString();
               
            
                //Webseite laden
                WebRequest req2 = WebRequest.Create(this.url);
                WebResponse resp2 = req2.GetResponse();
                Stream stream2 = resp2.GetResponseStream();
                StreamReader sr2 = new StreamReader(stream2);

                string s2 = sr2.ReadToEnd();
                this.HTML = s2;

            
                Regex regex = new Regex("div class=\"slideshow_makemodel\"\\>\\s*(?<Brutto>[^\\<]*)\\s*", RegexOptions.CultureInvariant | RegexOptions.Compiled);
                string inputmarke = regex.Match(this.HTML).Groups["Brutto"].Value;
                string marke = inputmarke.Replace("div class=\"slideshow_makemodel\">", "");
            
                            

                dataGridView1.Rows.Add(inputmarke);
             }

Gruß
Marc

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo marc75,

lagere die Berechung in einen extra Thread aus, und schreibe dan z.B immer in einen Ruck z.B. 5 Positionen in das datagridview.

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

M
marc75 Themenstarter:in
43 Beiträge seit 2010
vor 13 Jahren

wie meinst du das?

S
902 Beiträge seit 2007
vor 13 Jahren

Oder schau dir mal den BackgroundWorker an.

mfg
serial

M
marc75 Themenstarter:in
43 Beiträge seit 2010
vor 13 Jahren

hast du da ein passendes Beispiel für mich?

Hinweis vor 13 Jahren

Bitte beachte [Hinweis] Wie poste ich richtig? 1.1 und 1.1.1 sowie 4b.

Schau in den Faq und Artikel Bereich für Multithreading (insbesondere [FAQ] Warum blockiert mein GUI?) und schau in die MSDN für den Backgroundworker. Da findest du überall Beispiele.

Thema geschlossen