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

C# Discussion :

Rendre une methode synchrone


Sujet :

C#

  1. #1
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2005
    Messages
    1 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : octobre 2005
    Messages : 1 447
    Points : 410
    Points
    410
    Par défaut Rendre une methode synchrone
    Salut,

    j'utilise une fonction d'un composant (externe) qui me retourne le résultat par un event :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Provider p = new Provider();
    p.start("test")
     
    p.completed += delegate(...)
    comment rendre cela synchrone ; pour pouvoir la lancer plusieurs fois.

    merci d avance

  2. #2
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : juillet 2016
    Messages : 2 696
    Points : 10 531
    Points
    10 531
    Billets dans le blog
    21
    Par défaut
    Un petit truc comme ça devrait fonctionner :
    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
     
    private static StringEventArgs ExecuteEventMethod(string s)
    {
       SemaphoreSlim sem = new SemaphoreSlim(0, 1);
       Provider p = new Provider();
       StringEventArgs e = null;
     
       p.Completed += (o, args) =>
       {
          e = args;
          sem.Release();
       };
       p.Start(s);
     
       sem.Wait();
       return e;
    }
    Il est aussi possible de faire une version async/await de cette méthode si besoin est, en utilisant sem.WaitAsync() à la place de sem.Wait()
    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

  3. #3
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2005
    Messages
    1 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : octobre 2005
    Messages : 1 447
    Points : 410
    Points
    410
    Par défaut
    Merci !
    marche pas .. je pense que cela vient du provider que j utilise ...

  4. #4
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : juillet 2016
    Messages : 2 696
    Points : 10 531
    Points
    10 531
    Billets dans le blog
    21
    Par défaut
    Hmm, est-ce que, par hasard, cela ne serait pas utilisé dans une application UI style winforms ? Le code peut ne pas fonctionner dans ce cas je pense (blocage infini) car les UI ont tendance à être monothread (et donc si on se met en attente, on le bloque).

    Sinon, la version async/await devrait fonctionner elle.
    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

  5. #5
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2005
    Messages
    1 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : octobre 2005
    Messages : 1 447
    Points : 410
    Points
    410
    Par défaut
    Ok merci

Discussions similaires

  1. [Thread][synchronized] Pb d'executions simultanees d'une methode
    Par Higestromm dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 02/09/2005, 13h04
  2. Rendre une disquette illisible par d'autres que moi
    Par kivoch dans le forum x86 16-bits
    Réponses: 8
    Dernier message: 26/12/2003, 23h49
  3. [TP]rendre une unité avec l'extension tpu
    Par mmm dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 28/10/2003, 21h09
  4. Rendre une page d'un TPageControl invisible
    Par DevelOpeR13 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 10/06/2003, 12h26
  5. Rendre une fenêtre modale non modale
    Par Smortex dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/03/2003, 18h56

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