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 Forms Discussion :

Freeze application c# [Débutant]


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Points : 45
    Points
    45
    Par défaut Freeze application c#
    Bonjour,

    Voilà, quand je lance ma forme, j'ai un lonng morceau de code qui se lance et qui me permet de récupérer des informations de mon site pour les mettre sur la dite form.
    Néanmoins, quand la form s'ouvre, l'application freeze, alors je sais que c'est ce bout de code qui gêne car j'ai mis en commentaire l'ordre de lancement (puisque c'est une fonction à part exprès justement) et là l'application va très bien.
    J'ai lu le cours sur les threads en c# (lien ici), mais quand je place mon code dans le threadsloop, mes label et autres apparaissent en erreurs, comment je dois le formuler svp.?

    Cordialement
    Vazer7070

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 79
    Points : 118
    Points
    118
    Par défaut
    Salut,

    Peux-tu poster un bout de ton code pour nous aider ?

    @+,
    Philippe

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Points : 45
    Points
    45
    Par défaut
    Je vous place le gros morceau qui fait freeze mon application:
    en lui-même, pour l'avoir tester, il fonctionne comme je veux.

    (code plus bas)

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2015
    Messages : 38
    Points : 126
    Points
    126
    Par défaut
    Quelques chose du style , utilise async/await et les methodes associées .

    Si tu préfère utiliser les .Dispose met les dans Try{}catch(exceptions)Finally{res.Dispose();}



    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
    public async Task check()
            {
                            string url = "ftp://[yourIp]/public_html/Friend/" + Properties.Settings.Default.search1 + "_amis/";
                            string responseFromServer = null;
     
                            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
                            request.Credentials = new NetworkCredential("user", "pass");
                            request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                            using (FtpWebResponse response = (FtpWebResponse )await request.GetResponseAsync())
                            using (Stream stream = response.GetResponseStream())
                            using (StreamReader readuser = new StreamReader(stream))
                            {
                               int nb = -2;
                               while ((readuser.Peek() > -1))
                               {
                                  await readuser.ReadLineAsync();
                                  nb += 1;
                                }
                               monoFlat_LinkLabel1.Text = nb.ToString();
                            }
    }
    Je te conseils aussi de séparé , //amis,//rang , etc , dans des méthodes séparées et dans des Thread séparé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public async Task Check()
            {
                Task amis = Task.Run(async () => await Amis());
                Task rang = Task.Run(async () =>  await Rang());
     
                await Task.WhenAll(amis,rang);
            }
    Ps:évite de donner ton ip sur des forums

  5. #5
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Points : 45
    Points
    45
    Par défaut
    (c'est l'ip du serveur, donc après si ils veulent hack, c'est comme ils veulent, mais les québécois sont hardus x))

    Je te remercie de ton aide, je vais tester et revenir vers toi^^

  6. #6
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 760
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Du coup, on n'a plus le code original ! Mais bon, la proposition de Biomega est tout à fait correct. L'utilisation de async/await est une manière d'éviter les gels de l'interface graphique.

    Une autre manière est d'utiliser un thread qui récupère et prépare toutes les informations nécessaires et ensuite notifie le thread graphique pour effectuer les mises à jour.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  7. #7
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par François DORIN Voir le message
    Bonjour,

    Du coup, on n'a plus le code original ! Mais bon, la proposition de Biomega est tout à fait correct. L'utilisation de async/await est une manière d'éviter les gels de l'interface graphique.

    Une autre manière est d'utiliser un thread qui récupère et prépare toutes les informations nécessaires et ensuite notifie le thread graphique pour effectuer les mises à jour.
    Je vais remettre le code original sans l'ip alors, le truc avec le threads qui récupère et après affiche c'est que je ne sais pas où placer les éléments de mon code en faite.

    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 void Check()
            {
                //amis
                try
                {
                    string url = "ftp://[ip]/public_html/Friend/" + Properties.Settings.Default.search2 + "_amis/";
     
                    FtpWebRequest request = default(FtpWebRequest);
                    FtpWebResponse response = default(FtpWebResponse);
                    request = (FtpWebRequest)WebRequest.Create(url);
                    request.Credentials = new NetworkCredential("user", "pass");
                    request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                    response = (FtpWebResponse)request.GetResponse();
                    StreamReader readuser = new StreamReader(response.GetResponseStream());
                    int nb = -2;
                    while ((readuser.Peek() > -1))
                    {
                        readuser.ReadLine();
                        nb += 1;
                    }
                    monoFlat_LinkLabel1.Text = nb.ToString();
                    response.Close();
                }
                catch (Exception ex)
                {
                    monoFlat_LinkLabel1.Text = ex.Message;
                    monoFlat_LinkLabel1.Enabled = false;
                }
                //rang
                try
                {
     
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://upchat.fr/key/modo.php");
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    StreamReader sr = new StreamReader(response.GetResponseStream());
                    string lol = sr.ReadToEnd();
     
                    HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://upchat.fr/key/admin.php");
                    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
                    StreamReader sy = new StreamReader(res.GetResponseStream());
                    string lal = sy.ReadToEnd();
     
                    if (lol.Contains(Properties.Settings.Default.search2))
                    {
                        monoFlat_Label8.Text = "Modérateur";
                        res.Close();
                    }
                    else if (lal.Contains(Properties.Settings.Default.search2))
                    {
                        monoFlat_Label8.Text = "Administrateur";
                        res.Close();
                    }
                    else
                    {
                        monoFlat_Label8.Text = "Utilisateur";
                        res.Close();
                    }
                }
                catch (Exception ex)
                {
                    monoFlat_Label8.Text = ex.Message;
                }
                //premium
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://upchat.fr/Account/" + Properties.Settings.Default.search2 + "_Account.php");
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    StreamReader sr = new StreamReader(response.GetResponseStream());
                    string okuser = sr.ReadToEnd();
     
                    if (okuser == "Disconnectednonorang 1" | okuser == "Connectednonorang 1")
                    {
                        monoFlat_Label9.Text = "Non";
                    }
                    else if (okuser == "Disconnectedyesnorang 1" | okuser == "Connectedyesnorang 1")
                    {
                        monoFlat_Label9.Text = "Oui";
                    }
     
                }
                catch (Exception ex)
                {
                    monoFlat_Label9.Text = ex.Message;
                }
                //bannis
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://upchat.fr/Account/" + Properties.Settings.Default.search2 + "_Account.php");
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    StreamReader sr = new StreamReader(response.GetResponseStream());
                    string okuser = sr.ReadToEnd();
                    if (okuser == "Disconnectednonorang 1" | okuser == "Connectednonorang 1")
                    {
                        monoFlat_Label10.Text = "Non";
                    }
                    else if (okuser == "Disconnectednoyesrang 1" | okuser == "Connectednoyesrang 1")
                    {
                        monoFlat_Label10.Text = "Oui";
                    }
                }
                catch (Exception ex)
                {
                    monoFlat_Label10.Text = ex.Message;
                }
                //connecté
                try
                {
                    FtpWebRequest req = default(FtpWebRequest);
                    FtpWebResponse res = default(FtpWebResponse);
                    req = (FtpWebRequest)WebRequest.Create("ftp://[ip]/public_html/key/" + Properties.Settings.Default.search2 + "_Connected.php");
                    req.Credentials = new NetworkCredential("user", "pass");
                    res = (FtpWebResponse)req.GetResponse();
                    monoFlat_Label11.Text = "oui";
                    res.Close();
     
                }
                catch (Exception ex)
                {
                    monoFlat_Label11.Text = "non";
                }
            }

  8. #8
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 760
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Merci pour le code.

    Je rejoins donc Biomega sur ses suggestions, à savoir de découper un peu ton code pour le rendre plus clair et d'utiliser des tâches.

    De plus :
    • Chaque bloc try/catch est indépendant. Il est donc tout à fait possible de mettre chacun d'entre eux dans une méthode distincte.
    • Pour l'utilisation des tâches et de async/await, je te renvois sur les tutoriels que j'ai écris récemment. Tu devrais y trouver tout le nécessaire !
    • Attention à l'opérateur | (OU bitwise) et à l'opérateur || (OU logique). Ce n'est pas la même chose ! Sauf pour les booléens... Mais pour des raisons de clarté, il est recommandé d'utiliser le OU logique
    • Ne pas oublier d'appeler la méthode Dispose() pour les objets de classe implémentant l'interface IDisposable. Ici, la solution la plus simple est d'encapsuler l'instanciation de ces objets dans une clause using.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  9. #9
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Points : 45
    Points
    45
    Par défaut
    D'accord merci^^

    Et pour l'appeler dans le form_load je met quoi.?

    quand je met "await checkall();", ça me fait une erreur :-/


    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
    public async Task Checkall()
            {
                Task amis = Task.Run(async () => await Amis());
                Task rang = Task.Run(async () => await Rang());
                Task premium = Task.Run(async () => await Premium());
                Task bannis = Task.Run(async () => await Bannis());
                Task connecté = Task.Run(async () => await Connected());
                await Task.WhenAll(amis, rang, premium, bannis, connecté);
            }
            public async Task Amis()
            {
                string url = "ftp://[ip]/public_html/Friend/" + Properties.Settings.Default.search1 + "_amis/";
     
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
                request.Credentials = new NetworkCredential("user", "pass");
                request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                using (FtpWebResponse response = (FtpWebResponse)await request.GetResponseAsync())
                using (Stream stream = response.GetResponseStream())
                using (StreamReader readuser = new StreamReader(stream))
                {
                    int nb = -2;
                    while ((readuser.Peek() > -1))
                    {
                        await readuser.ReadLineAsync();
                        nb += 1;
                    }
                    monoFlat_LinkLabel1.Text = nb.ToString();
                }
            }
            public async Task Rang()
            {
                string lol;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://upchat.fr/key/modo.php");
                using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
                using (Stream se = response.GetResponseStream())
                using (StreamReader sr = new StreamReader(se))
                    lol = await sr.ReadToEndAsync();
     
                string lal;
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://upchat.fr/key/admin.php");
                using (HttpWebResponse res = (HttpWebResponse)await req.GetResponseAsync())
                using (Stream sa = res.GetResponseStream())
                using (StreamReader sy = new StreamReader(sa))
                    lal = await sy.ReadToEndAsync();
     
                if (lol.Contains(Properties.Settings.Default.search1))
                {
                    monoFlat_Label8.Text = "Modérateur";
     
                }
                else if (lal.Contains(Properties.Settings.Default.search1))
                {
                    monoFlat_Label8.Text = "Administrateur";
     
                }
                else
                {
                    monoFlat_Label8.Text = "Utilisateur";
     
                }
     
     
            }
            public async Task Premium()
            {
                string okuser;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://upchat.fr/Account/" + Properties.Settings.Default.search1 + "_Account.php");
                using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
                using (Stream sz = response.GetResponseStream())
                using (StreamReader sr = new StreamReader(sz))
                    okuser = await sr.ReadToEndAsync();
     
                if (okuser == "Disconnectednonorang 1" || okuser == "Connectednonorang 1")
                {
                    monoFlat_Label9.Text = "Non";
                }
                else if (okuser == "Disconnectedyesnorang 1" || okuser == "Connectedyesnorang 1")
                {
                    monoFlat_Label9.Text = "Oui";
                }
     
     
            }
            public async Task Bannis()
            {
                string okuser;
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://upchat.fr/Account/" + Properties.Settings.Default.search1 + "_Account.php");
                using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
                using (Stream su = response.GetResponseStream())
                using (StreamReader sr = new StreamReader(su))
                    okuser = await sr.ReadToEndAsync();
                if (okuser == "Disconnectednonorang 1" || okuser == "Connectednonorang 1")
                {
                    monoFlat_Label10.Text = "Non";
                }
                else if (okuser == "Disconnectednoyesrang 1" || okuser == "Connectednoyesrang 1")
                {
                    monoFlat_Label10.Text = "Oui";
                }
            }
            public async Task Connected()
            {
     
                try
                {
                    FtpWebRequest req = default(FtpWebRequest);
                    FtpWebResponse res = default(FtpWebResponse);
                    req = (FtpWebRequest)WebRequest.Create("ftp://[ip]/public_html/key/" + Properties.Settings.Default.search1 + "_Connected.php");
                    req.Credentials = new NetworkCredential("user", "pass");
                    using (res = (FtpWebResponse)await req.GetResponseAsync())
                        monoFlat_Label11.Text = "oui";
     
     
                }
                catch (Exception ex)
                {
                    monoFlat_Label11.Text = "non";
                }
            }

  10. #10
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2015
    Messages : 38
    Points : 126
    Points
    126
    Par défaut
    Pour une meilleure compréhension ,je me permet de te renvoyer aussi vers le tutoriel proposé par François Dorin,la plupart du temps quand tu sera confronté à une interface utilisateur tu devra utiliser l'asynchronisme car comme tu la constaté une app. qui freeze ces pas très agréable .

    Résoudre une erreur ces bien mais comprendre pourquoi ces mieux

    http://fdorin.developpez.com/tutorie...eadpool/part3/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private async void Form_Load(object sender, EventArgs e)
    {
        //Do something
        var data = await GetDataFromDatabaseAsync();
        //Use data to load the UI
    }
    Source:
    https://stackoverflow.com/questions/...g-for-winforms

    Je me permet aussi de te conseiller d'utiliser des private const .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private const string ModoURL = "http://upchat.fr/key/modo.php";
    et d'utilisé StringBuilder ,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    StringBuilder Url = new StringBuilder("ftp://[ip]/public_html/Friend/");
    Url.Append(Properties.Settings.Default.search1);
    Url.Append("_amis/");
    Je te renvoi aussi vers ce cours de DotNetPerls ,beaucoup de bon conseil au sujet de comment optimiser ton code et adopter certaines bonne pratique
    https://www.dotnetperls.com/optimization

  11. #11
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Points : 45
    Points
    45
    Par défaut
    Merci de tes conseils, j'en prend note^^

    Néanmoins 2 choses:
    -le site DotNetPerls est vide chez moi :-/
    - et qu'est-ce que m'apporte le string builder et les private const.?

    D'autant que ni le cours ni Stack ne m'aide car je ne sais pas quoi mettre dans le load toujours Aucun de eux me disent quoi faire.

  12. #12
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Points : 45
    Points
    45
    Par défaut
    *bug message double*

  13. #13
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2015
    Messages : 38
    Points : 126
    Points
    126
    Par défaut
    L’objet String est immuable. Chaque fois que vous utilisez l’une des méthodes de la classe System.String, vous créez un nouvel objet string en mémoire, ce qui nécessite une nouvelle allocation d’espace pour ce nouvel objet. Si vous devez effectuer des modifications répétées sur une chaîne, la surcharge associée à la création d’un objet String peut être coûteuse. Vous pouvez utiliser la classe System.Text.StringBuilder quand vous voulez modifier une chaîne sans créer d’objet. Par exemple, la classe StringBuilder permet d’améliorer les performances quand il s’agit de concaténer un grand nombre de chaînes dans une boucle.
    https://msdn.microsoft.com/fr-fr/lib...v=vs.110).aspx

    Pas de souci de mon coté pour DotNetPerls .

    Advantages. Constants promote the integrity of your programs by telling the compiler not to allow you to change the values during runtime. This should result in fewer accidental bugs.
    Magic numbers are literal numbers, such as 100 or 47524, that appear in the middle of a program without explanation. If you program in a language that supports named constants, use them instead.

    Performance notes. Const may improve performance over variables in many cases, particularly when using types like int. It eliminates accesses to memory that occur with fields and locals.
    Readonly

    A summary. Const is a reserved word. It specifies that a value is invariant and must not be modified after compile-time. Const values, like const strings, simplify and optimize programs.
    https://www.dotnetperls.com/const

  14. #14
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Points : 45
    Points
    45
    Par défaut
    oui mais rien ne fonctionne et comme dit plus haut personne ne donne d'exemple en lien avec mon sujet sur comment mettre en marche les task

    Task.run(); ne fonctionne pas chez moi, rien ne fonctionne, tout freeze ça me rend fou...

  15. #15
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2015
    Messages : 38
    Points : 126
    Points
    126
    Par défaut
    Tous ce dont tu as besoin avec exemple à la clé ce trouve dans le tutoriel cité plus haut ,surtout dans la troisième partie .

    Si tu as lu le tutoriel en question et que ça ne marche quand même pas copie moi l'exception où l'erreur qui te bloque

  16. #16
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Points : 45
    Points
    45
    Par défaut
    Ce n'est pas une erreur qui me bloque c'est que je ne trouve pas les instructions pour lancer (voir ci-dessous) dans le form_load (même la méthode stack ne fonctionne pas) et que mes essais se concluent pas des freezes ou alors que rien ne se passe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public async Task CheckallAsync()
            {
                Task amis = Task.Run(async () => await Amis());
                Task rang = Task.Run(async () => await Rang());
                Task premium = Task.Run(async () => await Premium());
                Task bannis = Task.Run(async () => await Bannis());
                Task connecté = Task.Run(async () => await Connected());
                await Task.WhenAll(amis, rang, premium, bannis, connecté);
            }

  17. #17
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2015
    Messages : 38
    Points : 126
    Points
    126
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private async void Form_Load(object sender, EventArgs e)
    {
        await CheckallAsync();
    }

  18. #18
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Points : 45
    Points
    45
    Par défaut
    J'ai testé mais rien ne s'affiche justement :-/

  19. #19
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2015
    Messages : 38
    Points : 126
    Points
    126
    Par défaut
    Long-Awaited Asynchrony

    Now, finally, the payoff. I can make the Start method asynchronous, which lets me use await and make my initialization logic asynchronous. As per convention, I’ve renamed Start to StartAsync, and Initialize to InitializeAsync. I’ve also changed their return type to async Task:
    etc...
    https://msdn.microsoft.com/en-us/magazine/mt620013.aspx

  20. #20
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 760
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Tu as une erreur dans ton code. Il faut que tu écrives :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public async Task CheckallAsync()
            {
                await Amis();
                await Rang();
                await Premium();
                await Bannis();
                await Connected();            
            }

    En effet, dans ton précédent code, Task.Run lance une nouvelle tâche en utilisant un thread du pool de thread. Ici, async/await ne l'utilise pas car on est dans un contexte graphique. La différence est subtile, mais comme tes méthodes Amis, Rang, etc... modifie directement le texte de labels en dehors du thread graphique, ton code génère une exception "InvalidOperationException".

    Pour des raisons complexes, l'exception passe inaperçue. Mais tu peux t'en rendre compte si tu modifies ta méthode initiale en utilisant un bloc try/catch

    Code C# : 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
     
    public async Task CheckallAsync()
            {
                try 
                {
                Task amis = Task.Run(async () => await Amis());
                Task rang = Task.Run(async () => await Rang());
                Task premium = Task.Run(async () => await Premium());
                Task bannis = Task.Run(async () => await Bannis());
                Task connecté = Task.Run(async () => await Connected());
                await Task.WhenAll(amis, rang, premium, bannis, connecté);
                }
                catch(Exception ex)
                {
                    // Mettre un point d'arrêt si dessous et regarder la valeur de ex dans le deboggeur
                    string msg = ex.Message;
                }
            }
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Lancer form qui freeze l'application
    Par alacaraibe dans le forum Windows Forms
    Réponses: 2
    Dernier message: 15/12/2009, 17h17
  2. [Memset] Freeze de l'application
    Par Bleys dans le forum Bibliothèque standard
    Réponses: 22
    Dernier message: 02/09/2009, 12h10
  3. Mon application "FREEZE"
    Par donaldz dans le forum Langage
    Réponses: 2
    Dernier message: 08/04/2009, 22h27
  4. "Freeze" d'une application Java/SWING sur fedora 10
    Par logdrop dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 27/03/2009, 16h26
  5. Freeze de l'application
    Par thierry007 dans le forum VB.NET
    Réponses: 6
    Dernier message: 09/10/2008, 12h59

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