Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > F#
F# Forum d'entraide sur la programmation en langage fonctionnel F#
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/12/2010, 23h46   #1
Trap D
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 437
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 437
Points : 5 301
Points : 5 301
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 :
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 :
Citation:
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 : Intérieur avec jeune femme de Vilhelm Hammershoi
Trap D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 00h40   #2
LLB
Membre Expert
 
Inscription : mars 2002
Messages : 962
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 962
Points : 1 149
Points : 1 149
Pour utiliser System.Forms, il faut que le point d'entrée ait l'attribut STAThread. Essaie ceci :

Code :
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.
LLB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 13h49   #3
Trap D
Rédacteur/Modérateur
 
Avatar de Trap D
 
Inscription : septembre 2003
Messages : 4 437
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 4 437
Points : 5 301
Points : 5 301
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 : Intérieur avec jeune femme de Vilhelm Hammershoi
Trap D est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h13.


 
 
 
 
Partenaires

Hébergement Web