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

Dotnet Discussion :

Windows et Multi-Threading - Invoke


Sujet :

Dotnet

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Points : 20
    Points
    20
    Par défaut Windows et Multi-Threading - Invoke
    Bonjour,

    Je poste ici mais j'ai egalement poste dans le forum windows. C'est peut-etre mal, et dans ce cas me culpa, mais ce forum est plus actif il me semble.

    J'ai une question qui me titille depuis quelque-temps, c'est que dans son Framework .NET Microsoft defini des fonctions invoke sur les controls pour tous les languages en specifiant qu'il faut l'utiliser pour recuperer le thread qui a construit le controle. Ils precisent meme quelque part que c'est une regle de windows, qu'un control de doit etre update que par le thread qui l'a cree (illegal cross thread call)

    Du coup je me demande... Et alors les autres ils font comment ? Ya-til des equivalents en JAVA? En C++ standard ? (En dehors du Framework .NET ???)

    Je n'arrive pas a trouver de vraie information a ce sujet, alors si vous avez des liens ou des explications interessantes.

    Merci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Salut,

    c'est une regle de design quand tu programmes en .Net, en effet, la propriété CheckForIllegalCall (me souvient plus du nom =p) est juste la pour du debuggage.

    Tout d'abord, il est 'logique' qu'un thread d'UI garde le controle sur la modification de ce qu'elle a instancié, ca t'evite instrinsequement les race conditions. Mais la vraie raison, tient de la rencontre entre l'interop sur des composants com et le fonctionnement des thread managés.

    Tous nouveaux threads de .Net a par defaut un appartment MTA, sauf si tu precises le contraire avant son demarrage. A coté de ca, certains controls WinForms ne sont que des wrappers de composants Com pour .Net et ces derniers ont des apartments specifiés pour n'autoriser qu'un seul thread à y acceder. C'est pour cela qu'un thread demarrant une appli Winforms doit etre marqué avec l'attribute STAThreadAttribute (qui va forcer l'apartment du thread en STA), et qu'on interdit à un autre thread de modifier des composants d'UI, de fait tu es sur que tout ce qui touchera ton UI (et potentiellement un compo Com wrappé) sera dans un apartment correct, puisque seul le thread createur (sensé etre STA) aura la controle sur ses controls.

    Bref, en gros, c'est surtout pour l'interop avec des concepts non-managés (drag&drop, composants Com).

    Pour plus d'infos, il y a cette discussion sur TheScripts, qui explique plus en details (pour les windowsiens 'non managé' =p ) le pourquoi du comment.

Discussions similaires

  1. Réponses: 8
    Dernier message: 11/04/2014, 09h44
  2. Programmation multi-Threads en R sur windows
    Par boris150 dans le forum R
    Réponses: 2
    Dernier message: 12/03/2014, 15h25
  3. Windows et Multi-Threading - Invoke
    Par zi_omnislasher dans le forum Windows
    Réponses: 1
    Dernier message: 26/10/2007, 10h13
  4. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09

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