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