2009-12-29 4 views
2

J'ai un problème pour que le code suivant fonctionne.F # Type Inference et System.Object

open System 
open System.ComponentModel 
open System.Threading 

let triggerEvent (state : Object) = Console.Write("Do Something.") 

let asyncContext = AsyncOperationManager.CreateOperation(null) 
asyncContext.PostOperationCompleted(triggerEvent, null) 

Je reçois une erreur, que triggerEvent est de type « a -> unit au lieu de SendOrPostCallback. SendOrPostCallback est de type Object -> unit. Je me demande pourquoi triggerEvent est de type 'a -> unit au lieu de Object -> unit. J'ai explicitement déclaré l'état en tant qu'objet et c'est toujours 'a.

Des suggestions? Je vous remercie.

Répondre

2

Je ne suis pas un expert sur le filetage, mais si PostOperationCompleted attend un SendOrPostCallback, essayez d'emballer vos triggerEvent comme ceci: remplacer

asyncContext.PostOperationCompleted(triggerEvent, null) 

par

asyncContext.PostOperationCompleted(new SendOrPostCallback(triggerEvent), null) 
+0

Merci! C'est ce que je cherchais. – PetPaulsen