Wielowątkowa przegladarka

0

Witam chciałem zrobić wielowątkową przegladarke, tak aby każda karta była w osobnym wątku. No i pojawił sie problem bo gdy tworzę nową kartę w nowym wątku program sie wysypuje. Poniżej kod metody która jest odpowiedzialna za dodawanie nowej karty:

private void nowaKartaToolStripMenuItem_Click(object sender, EventArgs e)
        {
          
            karta[i] = new Thread(delegate()
            {
                web = new WebBrowser();
                web.ScriptErrorsSuppressed = true;
                web.Dock = DockStyle.Fill;
                web.Visible = true;
                web.DocumentCompleted += web_DocumentCompleted;
                tabControl1.TabPages.Add("Nowa karta");
                tabControl1.SelectTab(i);
                tabControl1.SelectedTab.Controls.Add(web);
                i += 1;
            }
            );
            karta[i].Start();
        }

Utworzyłem wcześniej tablicę watków. Jak nie obejmę tego jest w klamerkach w wątek to zaje.....cie działa. Nie wiem w czym jest problem. Może ktos pomoże?

0

To nie działa, bo to nie ma prawa działac;) Tutaj robienie nowego wątku nie ma sensu, bo tylko ustawiasz propertiesy na elementach zdefiniowanych w wątku głównym (Cross-thread operation not valid). Jak juz koniecznie chcesz bawić się w wątki to przeczytaj jakis toutorial o asynchronicznosci, async-await, klasa Task, PTL itd.

0

a jak byś rozwiazał problem każdej karty w innym wątku?

0

Wlasnie o to chodzi, zeby te karty nie byly w osobnych wątkach. Karty to elementy gui, wiec nie powinny byc porozpieprzane po wątkach tylko wszystkie powinny byc w jednym. Natomiast wczytywanie danych do webBrowsera zrobilbym w osobnym wątku (async/await).

0

nie da się mieć karty w osobnych wątkach. Tak jest windows zaprojektowany i koniec. Jedyne co możesz zrobić to dla każdej karty stworzyć osobne okno - tylko że to będzie wyglądało tak jakbyś aplikację uruchamiał x razy

0
karta[i] = new Thread(delegate()
            {
                ((WebBrowser)tabControl1.SelectedTab.Controls[0]).Navigate(toolStripComboBox1.Text);
            });

Czyli takie coś przy przekierowaniu ustawiać nowy wątek? Jak sprawdzić czy na prawdę ta aplikacja jest wielowątkowa?

0

takie coś też jest błędne. Nie da się zmusić kontrolki nieprzystosowanej do pracy w trybie asynchronicznym do właśnie takiej pracy. To może Ci i działać dopóki będziesz miał szczęście. Czytaj, próbuj https://www.google.pl/search?q=asynchronous+web+browser+c%23

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