IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Accès à la BDD dans un background worker fait freezer le thread principal


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 13
    Par défaut Accès à la BDD dans un background worker fait freezer le thread principal
    Bonjour,

    J'ai un processus qui prend du temps (une grosse requête sur une base Access), du coup je me suis dit que j'allais threader ce processus, afin de ne pas bloquer l'interface (la requête est assez lourde et peut prendre jusqu'a 30 secondes pour s'éxecuter.

    J'ai donc essayé d'utiliser un backgroundworker, mais lorsque celui-ci fait l'accès à la BDD, l'écran se freeze le temps de l'execution de la requête. Ma question est donc : mais que se passe-t'il ? est-ce normal ? si non, avez-vous des idées pour résoudre ce problème qui va me rendre chèvre ? Merci d'avance pour vos contributions !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Public Class ctlSessionResultat
    ...
    Private WithEvents mbgw As BackgroundWorker
    ...
     
        Private Sub ctlSessionResultat_Load(sender As Object, e As EventArgs) Handles Me.Load
            mbgw = New BackgroundWorker() With {.WorkerReportsProgress = True, .WorkerSupportsCancellation = True}
            If Not mbgw.IsBusy Then mbgw.RunWorkerAsync()
        End Sub
     
        Private Sub mbgw_DoWork(sender As Object, e As DoWorkEventArgs) Handles mbgw.DoWork
            Dim _RechercheLines(37, 0) As String
            Dim strSql As String = "SELECT * from Table1"
            Dim strSql2 As String = "SELECT * from Table2"
            Dim ligne As Long = 0
            Dim myDataset As New DataSet("myDataset")
            Dim totalLine As Long = 0
            Dim dt As DataTable
     
            'chargement des datatables avec les données pour la recherche
            For Each qry As String In {strSql, strSql2}
                dt = New DataTable()
                Dim da As  New OleDbDataAdapter(qry, "Provider=Microsoft.ACE.OLEDB.12.0;Data source=c:\maBDD.mdb")
                da.Fill(dt)
                totalLine += dt.Rows.Count
                myDataset.Tables.Add(dt)
            Next
     
            'redimensionne le tableau avec les elements de recherche
            ReDim _RechercheLines(nbColRecherche - 1, totalLine)
     
            'Remplissage du tableau
            For Each dt In myDataset.Tables
                For Each r As DataRow In dt.Rows
                    For i = 0 To dt.Columns.Count - 1
                        If r(i) IsNot DBNull.Value Then _RechercheLines(i, ligne) = r(i)
                    Next
                    ligne += 1
                Next
            Next
            e.result = _RechercheLines
        End Sub
    End Class

    Petites précisions :
    Mon code se situe dans un contrôle utilisateur qui se situe lui-même dans une DLL
    J'utilise Office 2016 (32 bits)
    VS 2015
    framework 4

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    mets pause pendant le freeze
    affiche ensuite la fenetre qui liste les threads et où ils en sont, ca te donnera surement une piste pour savoir où ca bloque
    (tu verras d'ailleurs le thread principal et ce qu'il fait)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. PB Accès schémas BDD dans sql server 2005
    Par tikam dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 16/06/2006, 08h42
  2. Quel type de BDD dans mon cas
    Par zoubidaman dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 10/06/2004, 18h00
  3. [ADRESSAGE][DEBUTANT]Accés à une machine dans un sous-réseau
    Par Milark dans le forum Développement
    Réponses: 4
    Dernier message: 26/03/2004, 09h45
  4. Temps d'accès à des données dans un fichier
    Par TONIAPEL dans le forum Assembleur
    Réponses: 5
    Dernier message: 28/09/2003, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo