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

Windows Phone .NET Discussion :

Problème pour récuperer la vitesse de connexion internet sur Windows Phone


Sujet :

Windows Phone .NET

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2010
    Messages : 96
    Points : 72
    Points
    72
    Par défaut Problème pour récuperer la vitesse de connexion internet sur Windows Phone
    Bonjour tout le monde ! Je viens poster car je rencontre un petit souci pour récuperer la vitesse de connexion internet de mon wp !
    Mon code à l'air de fonctionner parfaitement sans erreur ni exception levé mais cependant je ne comprend pas pourquoi le 'bandwitch' me renvoie tjr "0" comme vitesse de connexion.

    Voici le code que j'utilise:
    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
     
    //Récuperation de la vitesse de la connexion d'internet
            private int GetSpeed_connection()
            {
                int speed = 0;
                if (DeviceNetworkInformation.IsNetworkAvailable)
                {
                    //Execute une résolution d'adresse sur le site de microsoft 
                    DeviceNetworkInformation.ResolveHostNameAsync(
                    new DnsEndPoint("microsoft.com", 80),
                    new NameResolutionCallback(nrr =>
                    {
                        NetworkInterfaceInfo info = nrr.NetworkInterface;
                        if (info != null)
                        {
                            speed = info.Bandwidth;
                        }
                    }), null);
                }
                else
                {
                    //Execute une résolution d'adresse en local car pas de connexion web 
                    DeviceNetworkInformation.ResolveHostNameAsync(
                    new DnsEndPoint("127.0.0.1", 80),
                    new NameResolutionCallback(nrr =>
                    {
                        NetworkInterfaceInfo info = nrr.NetworkInterface;
                        if (info != null)
                        {
                            speed = info.Bandwidth;
                        }
                    }), null);
                }
                return speed;
            }
    Dans l'attente de vos nouvelles je vous souhaite de passer une agréable journée

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut

    ResolveHostNameAsync est comme son nom l'indique asynchrone.
    => le code que tu as mis dedans sera exécuté dés que les info seront disponible
    => return speed; retournera toujours 0

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2010
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    Pourtant je ne l'apel pas après ma fonction asynchrone mais pendant..
    Avez vous un conseil a me donner ?
    Car effectivement tout ce que j'essaie de récupérer de mon objet "networkInterfaceInfo" me retourne soit une chaîne vide ou 0.. Et 1 fois sur 10 je récupère correctement.
    Y aurait t'il moyen de lui dire de l'effectuer en synchrone ou de le forcer a attendre le résultat ?
    Merci beaucoup pour votre intérêt porté sur ma question.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par middle6 Voir le message
    Pourtant je ne l'apel pas après ma fonction asynchrone mais pendant..
    Comprend tu le sens de asynchrone?

    Y aurait t'il moyen de lui dire de l'effectuer en synchrone ou de le forcer a attendre le résultat ?
    Si tu fait cela tu va bloquer ton application. Et si la récupération dure plusieurs second....

    Faut prendre en compte le fait que tu n'as aucune idée de l'instant où tu aura l'information. Tu peux soit utiliser un property qui sera mise à jour soit un event.

    Attention la method appelé par ResolveHostNameAsyncunest exécuté dans un thread. Du devra surement utiliser Deployment.Current.Dispatcher.BeginInvoke

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2010
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    EUh oui je vois bien comment sa marche t'inkiète. J'apel des methode asynchrone en webService et je vois bien que les réponse arrive aléatoirement.
    Cependant je pensait pouvoir l'appelé en methode synchrone mais bon..
    N'oublions pas que je reste comme même un étudiant noob lol.

    Ok merci beaucoup j'ai pas pensé avec le "propertyChanged" !

    Dailleurs je pense utiliser le INotifyPropertyChanged.PropertyChanged Event . Pense tu que cela soit une bonne solution ? Etant donné qu'il mettra à jour mon champ une fois la propriété changé

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par middle6 Voir le message
    EUh oui je vois bien comment sa marche t'inkiète. J'apel des methode asynchrone en webService et je vois bien que les réponse arrive aléatoirement.
    C'était juste au cas ou .

    Cependant je pensait pouvoir l'appelé en methode synchrone mais bon..
    Y as surement un moyen avec des équivalents au mutex. Mais vue que tu bloque le thread... Une IHM figée c'est pas terrible ^^


    Dailleurs je pense utiliser le INotifyPropertyChanged.PropertyChanged Event . Pense tu que cela soit une bonne solution ? Etant donné qu'il mettra à jour mon champ une fois la propriété changé
    Pour le binding il y as deux manières :
    * INotifyPropertyChanged
    * DependencyObject

    Je trouve la méthode avec INotifyPropertyChanged plus simple.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2010
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    Yess merci bien ,je go tester tout sa avec le notifyPropertyChanged et revient vous tenir au courant d'ici 2heures ;-).

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2010
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    Ree desolé du temps passé !! J'ai galèré un moment Mais voici la solution enfin trouvé.
    Et je me suis donné de la peine lol
    J'ai monté une class en "INotifyPropertyChanged" :
    et j'ai binder les valeurs sur mes champs textblock :
    Je vien poster des exemples de mon code, en esperant que cela puisse être utile à quelqun un jour....

    Class InfoReseau du Windows Phone:
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
     public class InfoReseau:INotifyPropertyChanged
        {
            //Initialise un évenement property changed pour changement de valeur
            public event PropertyChangedEventHandler PropertyChanged;
            //Initialisation des valeurs/propriété
     
            //Description de l'état de connexion
            private string networkAvailability;
            //Type de connexion
            private string network_type;
            //Type d'interface
            private string network_interface;
            //Type d'interface
            private string network_vitesse;
     
            protected delegate void OnUiThreadDelegate();
     
            //Evenement propertychanged
            private void NotifyPropertyChanged(String info)
            {
                if (PropertyChanged != null)
                {
                    //PropertyChanged(this, new PropertyChangedEventArgs(info));
                    this.OnUiThread(() => this.PropertyChanged(this, new PropertyChangedEventArgs(info)));
     
                }
            }
     
            //Constructeur
            public InfoReseau()
            {
                NetworkAvailability = NetworkInterface.GetIsNetworkAvailable() ? "Internet acces" : "Local acces";
     
     
            }
     
     
     
            /// <summary>
            /// ///////////////////GUETTEUR - SETTEUR
            /// </summary>
     
            //Description de l'état de connexion
            public string NetworkAvailability
            {
                get
                {
                    return networkAvailability;
                }
                set
                {
                    networkAvailability = value;
                    //Modification de valeur si notification de mis à jour
                    NotifyPropertyChanged("NetworkAvailability");
                }
            }
            //Type de connexion réseau
            public string Network_type
            {
                get
                {
                    return network_type;
                }
                set
                {
                    network_type = value;
                    //Modification de valeur si notification de mis à jour
                    NotifyPropertyChanged("Network_type");
                }
            }
            //nom de l'interface réseau
            public string Network_interface
            {
                get
                {
                    return network_interface;
                }
                set
                {
                    network_interface = value;
                    //Modification de valeur si notification de mis à jour
                    NotifyPropertyChanged("Network_interface");
                }
            }
            //Vitesse de la connexion réseau
            public string Network_vitesse
            {
                get
                {
                    return network_vitesse;
                }
                set
                {
                    network_vitesse = value;
                    //Modification de valeur si notification de mis à jour
                    NotifyPropertyChanged("Network_vitesse");
                }
            }
     
     
     
     
            /// <summary>
            /// ///////////////////FONCTIONS
            /// </summary>
            /// 
     
            //Fonction pour permettre l'invocation des methoded depuis le thread de l'interface
            protected void OnUiThread(OnUiThreadDelegate onUiThreadDelegate)
            {
                if (Deployment.Current.Dispatcher.CheckAccess())
                {
                    onUiThreadDelegate();
                }
                else
                {
                    Deployment.Current.Dispatcher.BeginInvoke(onUiThreadDelegate);
                }
            } 
        }
    Initialise un nouvel objet de la class InfoReseau dans la page.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     //Initialise un objet InfoReseau 
     private InfoReseau net_stat = new InfoReseau();
     
     
     
            public MainPage()
            {
     
                InitializeComponent();
     
                //Lie le context data de la page XAML à la class InfoReseau - inotifyPropertyChanged
                DataContext = net_stat;
            }
    Et pour les liaisons sur les champs textblock de ma page XAML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                    <TextBox Height="55"  Text="{Binding Path=Network_vitesse}" Width="400" Foreground="#FF6FEF12" FontSize="20" />
    Encore desolé du temps mais sa ma pris un moment

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. partager une connexion internet sur windows server 2003
    Par med_med dans le forum Windows Serveur
    Réponses: 11
    Dernier message: 16/06/2013, 21h45
  2. [EJB3 Entity] Problème pour récuperer collection
    Par nelob dans le forum Java EE
    Réponses: 0
    Dernier message: 14/05/2009, 09h13
  3. Limiter sa vitesse de connexion Internet?
    Par Queb dans le forum Apple
    Réponses: 2
    Dernier message: 29/07/2007, 09h51
  4. Problème pour récuperer data d'un formulaire
    Par paris13 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 08/12/2006, 10h33
  5. Problème pour récuperer donnée dans un txt
    Par Maldus dans le forum Delphi
    Réponses: 4
    Dernier message: 15/10/2006, 21h19

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