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 :

Comportement étrange avec l'utilisation de Datagridview.Rows.clear() [Débutant]


Sujet :

VB.NET

  1. #41
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 48
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    Je l'avais pas mis au début en me disant que ca devrait passer, mais quand j'ai vu un Nothing dans ma collection j'ai compris qu'il y en avait besoin ^^
    Il y a très peu de classes dans le framework qui sont thread safe
    oui
    Polo, j' ai fait ma classe et ca marche vraiement bien. J'ai remplace la collection que tu proposes par une liste de machine. du coup je retrouve mes petits!

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Private Sub ping(ByVal obj As Object)
     
            Dim ip = New String(obj)
            Dim m As machine
     
            Try
     
                Dim p As New Net.NetworkInformation.Ping
                Dim r = p.Send(ip, 150)
     
                If r.Status = Net.NetworkInformation.IPStatus.Success Then
     
                    m = New machine
     
                    m.hostname = System.Net.Dns.GetHostEntry(ipOrHostname).HostName
                    m.ip= System.Net.Dns.GetHostEntry(ipOrHostname).AddressList(0).ToString
                    m.EtatMachine = True
     
                    etatMachine.Add(m)
     
                Else
     
                    m = New machine
     
                    m.EtatMachine= False
     
                    If ipAddr.isIPv4(ip) Then
                        m.ip= ip
     
                    Else
                        m.hostname = ip
                    End If
     
                    etatMachine.Add(m)
     
     
                End If
     
            Catch ex As Exception
     
                m = New machine
     
                If ipAddr.isIPv4(ip) Then
     
                    m.ip= ip
     
                Else
     
                    m.hostname = ip
     
                End If
     
                m.EtatMachine = False
     
                etatMachine.Add(m)
     
             End Try
    end Sub
     
     Private _verrou As New Object
        Private Sub AddToCollectionThreadSafe(ByVal m As machine)
            SyncLock _verrou
                etatMachine.Add(m)
            End SyncLock
        End Sub
     
        Public ReadOnly Property Etat()
            Get
                Return etatMachine
            End Get
        End Property
    Il y a un truc qui reste pas tres clair. Ici le syncLock est dans private sub et je ne fais jamais appel a cette fonction. J'en deduit que des que je fais un .add, le programme va detecter tout seul un synclock. C'est ca ?

    Je me dis que ce probleme que j'avais avec le ping.async etait du au fait que je ne faisais pas de Synclock. Si je refais la meme chose avec le ping.asnyc + Synlock ca doit marcher de la meme facon non ?

    Au moins j'ai pu comprendre pas a pas la nécessité du Snyclock !

    Maintenant je vais supprimer au moins deux classes inutilies avec le hostEntry

    Je te remercie bcp pour tes remarques et tes explications.

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    on dit qu'un membre de classe est thread safe lorsqu'on peut appeler ce membre simultanément depuis plusieurs threads en étant sur que ca ne posera pas de problème
    dans msdn microsoft précise toujours si c'est thread safe ou pas, et c'est rarement le cas

    .add des collections ne l'est pas
    j'ai d"ailleurs rencontré un problème une fois lors de 3 tests
    un membre de ma list(of string) contenait nothing, alors que dans mon code je mettais forcément un string
    c'est un des problèmes qui peut arriver avec du non thread safe, des fois c'est une erreur ; pas d'erreur c'est encore pire car on ne s'en apercoit pas ou alors à un autre endroit du code et le debug devient difficile (la 1ère fois qu'on fait du multithreading on ne comprend même pas comment c'est possible)
    le .add sur un list(of ) agrandit un tableau et range la valeur dans la dernière ligne du tableau
    on peut donc imaginer que dans mon cas 2 .add simultanés ont fait agrandir 2x le tableau puis les 2 sont venus se ranger dans la dernière ligne laissant un trou au dessus de la dernière ligne

    il te faut donc un synclock à un endroit, le synclock garantie qu'un seul thread exécute le code intérieur à la fois
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. [Lazarus] Problème étrange avec l'utilisation de la fonction StrToFloat
    Par ovni76 dans le forum Lazarus
    Réponses: 7
    Dernier message: 07/09/2014, 18h01
  2. Réponses: 0
    Dernier message: 02/07/2013, 11h53
  3. Comportement étrange avec "order by"
    Par Warluck dans le forum SQL
    Réponses: 2
    Dernier message: 04/11/2010, 21h06
  4. Comportement étrange avec free.
    Par Rakken dans le forum C
    Réponses: 9
    Dernier message: 17/09/2008, 14h06
  5. Comportement étrange avec les index et "order by"
    Par Dia_FR dans le forum Requêtes
    Réponses: 5
    Dernier message: 18/08/2008, 09h18

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