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

F# Discussion :

Thread en mode STA ?


Sujet :

F#

  1. #1
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut Thread en mode STA ?
    Bonjour

    Je découvre F# avec Visual Studio et j'étudie des codes existants, certains sont extraits de fichiers de scripts (?) .fsx.
    J'ai réussi à en traduire un en programmes F# pour Visual Studio mais il plante au moment de la création d'une fenêtre.
    Je livre le début du code :
    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
    //Author: Scott Brown
    //10/10/2010
    //This code is licensed under the Code Project Open License (CPOL)
    // #r "WindowsBase"
    // #r "PresentationCore"
    // #r "PresentationFramework"
    open System
    open System.Windows
    open System.Windows.Markup
    open System.Windows.Controls
    open System.Windows.Shapes
    open System.Windows.Media
    open System.Xml
    open System.Collections.Generic
     
    //Make a Canvas subclass which supports ScrollViewer
    type ScrollableCanvas() = 
        inherit Canvas()
        override canvas.MeasureOverride  limit: Size =
           let availableSize = new Size(1000000., 1000000.)
           let mutable maxHeight = 0.
           let mutable maxWidth  = 0.
           for element : UIElement in base.InternalChildren do
                if element <> null then 
                   element.Measure(availableSize) |> ignore
                   let mutable left = Canvas.GetLeft(element) 
                   let mutable top  = Canvas.GetTop(element)
                   left <- left + element.DesiredSize.Width
                   top <- top +  element.DesiredSize.Height
                   maxWidth <- if maxWidth < left then left else maxWidth
                   maxHeight <- if maxHeight < top then top else maxHeight
           let newSize = new Size(Width=maxWidth, Height=maxHeight)
           newSize    
     
    let w = new Window(Topmost=true)
    La fenêtre w ne se créée pas et j'ai ce message :
    Exception non gérée : System.InvalidOperationException : Le thread appelant doit être en mode STA comme l'exigent de nombreux composants de l'interface utilisateur.
    Si j'étais en C ou en C++ je pense que CoInitializeEx(NULL, COINIT_APARTMENTTHREADED) aurait suffi a résoudre le problème mais en F# ?

    Merci
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  2. #2
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Pour utiliser System.Forms, il faut que le point d'entrée ait l'attribut STAThread. Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [<STAThread>]
    do
      let w = new Window(Topmost=true)
      ()
    Le bloc qui commence avec do correspond alors à ta fonction main du C.

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Merci ça fonctionne bien

    Ça m'a permis de voir qu'il y a une grande différence entre l'écriture d'un script où tout me parait mis un peu n'importe comment et ça marche et l'écriture d'un programme où il faut respecter une certaine logique. C'est mes premières impressions, ça va peut-être changer.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

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

Discussions similaires

  1. Thread et Mode STA
    Par kevindeta dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 26/03/2012, 17h50
  2. Executer un thread en mode pas à pas
    Par yann458 dans le forum Windows
    Réponses: 2
    Dernier message: 20/01/2012, 18h36
  3. MVVM: Erreur thread appelant doit être en mode STA
    Par Oberown dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 05/12/2010, 16h20
  4. [optimisation d'un programme] Thread et mode serveur
    Par Battant dans le forum Général Java
    Réponses: 0
    Dernier message: 19/03/2010, 01h46
  5. Réponses: 1
    Dernier message: 02/06/2008, 19h35

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