Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151

    [VB.NET 2005] Caricamento dati in thread separato

    Ciao a tutti, ho una comboBox che, all'apertura di un form, viene popolata (tramite dataReader e bindingSource) con tutti i comuni d'Italia. Logicamente questa operazione rallenta il caricamento e la visualizzazione del form.. allora ho pensato di mettere in un thread separato il caricamento dei dati. In pratica ho la sub per popolare la combo:
    codice:
    Private Sub SetComboComuni()
         cmd.CommandText = "Select ID_Comune, (comune + ' (' + provincia + ')') as città from comuni order by comune;"
         cmd.Connection = cn
         cn.Open()
         dr = cmd.ExecuteReader
         bs.DataSource = dr
         cmbComuni.DisplayMember = "città"
         cmbComuni.ValueMember = "ID_Comune"
         cmbComuni.DataSource = bs     
         cn.Close()
    End Sub
    e richiamo la sub in questa maniera:
    codice:
    Dim t As New Threading.Thread(AddressOf SetComboComuni)
    t.Start()
    Siccome non ho mai lavorato con i thread, e visto che, in questa maniera il form viene caricato senza attese, è giusto questo procedimento usando i thread o ci sono altri metodi migliori?
    Jupy

  2. #2
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    io userei una query asincrona ....mai usata ???

  3. #3
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    query asincrona.. :master:
    mi puoi delucidare?
    Specifico che uso un db di access.
    Jupy

  4. #4
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    allora già ti stoppo non si può fare con access !!!!

  5. #5
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Originariamente inviato da cassano
    allora già ti stoppo non si può fare con access !!!!
    Infatti, lo immaginavo..in quanto ne avevo sentito parlare per sql server ma non per access.

    Comunque, leggendo qualcosa sui thread e delegate, ho fatto una cosa del genere:
    codice:
    Private Sub SetTabellaComuni()
        cmd.CommandText = "Select ID_Comune, (comune + ' (' + provincia + ')') as città from comuni order by comune;"
        cmd.Connection = cn
        cn.Open()
        dr = cmd.ExecuteReader
        bs.DataSource = dr
        cn.Close()
    End Sub
    
    'carico in memoria la tabella comuni
    Dim t As New Threading.Thread(AddressOf SetTabellaComuni)
    t.Start()
    Il passo successivo è quello di popolare la comboBox con i dati della tabella, ma anche qui, quando vado a visualizzare la combo l'esecuzione viene rallentata fintato che la combo non è completamente popolata. Per ovviare a questo e, per non incorrere in operazioni cross-thread non valide, ho usato un thread in associazione con un delegate:
    codice:
    Delegate Sub ShowComuniDelegate()
    Dim threadShowComuni As New ShowComuniDelegate(AddressOf ShowComuni)
    
    Private Sub ShowComuni()
        If Me.InvokeRequired Then
            Me.Invoke(threadShowComuni)
            Return
        End If
        If cmbComuni.DataSource Is Nothing Then
            cmbComuni.DisplayMember = "città"
            cmbComuni.ValueMember = "ID_Comune"
            cmbComuni.DataSource = bs
        End If
        cmbComuni.SelectedIndex = -1
    End Sub
    
    'popolo la combo....
    Dim t As New Threading.Thread(AddressOf ShowComuni)
    t.Start()
    Il tutto provato nel pc a casa funziona bene e non si notano rallentamenti nel caricamento del form, mentre provato nel pc in ufficio si nota un rallentamento..ogni operazione viene bloccata fintanto che non viene popolata la combo...per questo vi pongo queste domande:
    1) il procedimento che ho adottato, è giusto o sto sbagliando qualcosa?

    2) il thread separato non dovrebbe evitare il rallentamento del caricamento del form? in pratica, perchè sul pc di casa è perfetto mentre in quello del lavoro no? potrebbe dipendere dal fatto che nel pc di casa ho 1Gb di ram mentre nell'altro 512Mb?

    Spero che qualcuno possa darmi una delucidazione..
    Grazie
    Jupy

  6. #6
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    up..
    Jupy

  7. #7
    Scusate se risveglio un thread vecchio ma ho lo stesso problema e volevo sapere se qualcuno aveva risolto.

    Ciao david

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.