Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [VB.NET] Navigazione a schede

    Salve ragazzi,
    sto creando un programma che ogni tot secondi apre una nuova scheda (del tabcontrol) e naviga su un indirizzo che ho precedentemente impostato.

    Ho creato un nuovo therd così da alleggerire il tutto:

    codice:
    dim inte as integer=0
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Control.CheckForIllegalCrossThreadCalls = False
                Dim MyThread As New Thread(AddressOf avvio)
                MyThread.Start()
    codice:
    Private Sub avvio()
            Do
    
    intervallo = numerocasuale.Next(60000, 180000)
    CType(TabControl1.SelectedTab.Controls.Item(0), WebBrowser).Navigate(ListBox1.SelectedItem)
    
     With ListBox1
                    If .SelectedIndex < 0 Or .SelectedIndex = .Items.Count - 1 Then
                        TabControl1.TabPages.Clear()
                        inte = 0
    
                        ListBox1.SelectedIndex = 0
    
    
                    Else
                       
                       
    
                        .SelectedIndex += 1
                      Threading.Thread.Sleep(intervallo)
    
    
                        Dim Browser As New WebBrowser
                        TabControl1.TabPages.Add("Nuova Scheda")
                        Browser.Name = "Web Browser"
                        Browser.Dock = DockStyle.Fill
                        TabControl1.SelectedTab.Controls.Add(Browser)
                        AddHandler Browser.DocumentCompleted, AddressOf Done
                        inte = inte + 1
                        CType(TabControl1.SelectedTab.Controls.Item(0), WebBrowser).Navigate("www.google.it")
                        CType(TabControl1.SelectedTab.Controls.Item(0), WebBrowser).ScriptErrorsSuppressed = True
                       
                    End If
              
                End With
    
            Loop
    In sostanza vorrei che ogni tot minuti, apre una nuova scheda-->attivi la scheda appena aperta (lasciando quella vecchia aperta, ma non attiva)---> navigare sul link.

    Però appena lo provo, il primo link lo fa correttamente in quando ho impostato che all'avvio abbia questo codice:
    codice:
     Dim Browser As New WebBrowser
            TabControl1.TabPages.Add("Nuova Scheda")
            Browser.Name = "Web Browser"
            Browser.Dock = DockStyle.Fill
            TabControl1.SelectedTab.Controls.Add(Browser)
            AddHandler Browser.DocumentCompleted, AddressOf Done
            inte = inte + 1
            CType(TabControl1.SelectedTab.Controls.Item(0), WebBrowser).Navigate("www.google.it")
            CType(TabControl1.SelectedTab.Controls.Item(0), WebBrowser).ScriptErrorsSuppressed = True
    cioè apre una nuova scheda su "google", ma appena cerca di aprire la seconda si ferma e mi dà:

    "Impossibile creare un'istanza del controllo ActiveX '8856f961-340a-11d0-a96b-00c04fd705a2' perché il thread corrente non è un apartment a thread singolo."


    Come mai? come posso fare per risolvere? Grazie mille in anticipo!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Utilizzi degli ActiveX ? Quali ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Non credo.... L'ho programmato in visual studio 2010

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prova ad impostare

    MyThread.SetApartmentState(ApartmentState.STA)

    prima dello start
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    l'ho inserito qui:

    codice:
    Control.CheckForIllegalCrossThreadCalls = False
    
                Dim MyThread As New Thread(AddressOf avvio)
               MyThread.SetApartmentState(ApartmentState.STA) 
                MyThread.Start()
    adesso l'errore è il seguente:
    "I controlli creati su un thread non possono avere come elemento padre un controllo su un thread diverso."

    codice:
     .SelectedIndex += 1
                        Threading.Thread.Sleep(intervallo)
    
    
                        Dim Browser As New WebBrowser
                        TabControl1.TabPages.Add("Nuova Scheda") <------ QUI MI DA' L'ERRORE 
                        Browser.Name = "Web Browser"
                        TabControl1.SelectedTab.Controls.Add(Browser)
                        AddHandler Browser.DocumentCompleted, AddressOf Done
                        inte = inte + 1
                        CType(TabControl1.SelectedTab.Controls.Item(0), WebBrowser).Navigate("www.google.it")
                        CType(TabControl1.SelectedTab.Controls.Item(0), WebBrowser).ScriptErrorsSuppressed = True

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Corretto il primo problema, il secondo è conseguenza dell'organizzazione del tuo codice.
    Tutti i controlli sull'interfaccia dovrebbero essere creati dal thread principale.

    In ogni caso leggi questo

    http://blogs.ugidotnet.org/piyo/arch...2/24/7764.aspx
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    da quello che ho capito, gli fa creare l'operazione come se fosse il thread principale...
    Ma non saprei come adattarlo al visual basic, essendo scritto in C

    potresti aiutarmi in tal senso?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Marcoluca56
    essendo scritto in C
    Veramente è in C#

    Se ti sembra complesso è perché stai scegliendo una strada sbagliata.

    Sposta la creazione del nuovo controllo nel programma principale.
    Del resto un thread per la sola creazione del controllo non ha molto senso.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    se lo metto sul principale, mi apre una scheda sola e poi naviga sempre su quella aperta all'inizio e non procede come vorrei (ogni tot apre una nuova scheda e naviga su questa che si è appena aperta, apre una nuova scheda e naviga e così via)

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Puoi usare il thread per la Navigate non per creare il controllo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.