2010-04-24 10 views
0

Le code:Comment utiliser délégué en C# pour Dictionnaire <int, Liste <string>>

[1]

private delegate void ThreadStatusCallback(ReceiveMessageAction action, 
     Dictionary<int, List<string>> message); 

[2]

Dictionary<int, List<string>> messagesForNotification = 
     new Dictionary<int, List<string>>(); 

[3]

Invoke(new ThreadStatusCallback(ReceivesMessagesStatus), 
    ReceiveMessageAction.Notification , messagesForNotification); 

[4]

private void ReceivesMessagesStatus(ReceiveMessageAction action, object value) 
{ 
    ... 
} 

Comment puis-je envoyer les deux variables de type ReceiveMessageAction respectivement Dictionary<int, List<string>> à la méthode ReceivesMessagesStatus.

Merci.


J'ai une fonction qui est exécutée dans un thread. Ici, je crée un objet de type Dictionary <int, List <string>> et en utilisant une délégation, je veux utiliser cet objet dans mon formulaire.

Une partie du code est au-dessus: [1] Decraration du délégué [2] L'objet [3] L'appel du délégué [3] la fonction Lorsque l'objet ont besoin d'être envoyer

+0

Pourriez-vous élaborer un peu? – James

Répondre

1

Solution:

[1]

Invoke(new ThreadStatusCallback(ReceivesMessagesStatus), new object[] { ReceiveMessageAction.Notification, messagesForNotification }); 

[2]

private void ReceivesMessagesStatus(ReceiveMessageAction action, Dictionary<int, List<string>> value) 
{ 
    ... 
} 
1

Avez-vous essayé de lancer la valeur en tant que dictionnaire? par exemple.

private void ReceiveMessagesStatus(ReceieveMessageAction action, object value) 
{ 
    var myDictionary = (Dictionary<int, List<string>>)value; 
    ... 
} 
+1

@Emanuel: Pourquoi ne pas être? Peut-être 'value as (Dictionary >)'? – abatishchev

+1

@Emanuel: Le dictionnaire peut être converti en objet ... – James

2

Vous pouvez le faire de type sécurisé sans jeter à l'aide d'un lambda:

Invoke(new MethodInvoker(
    () => ReceivesMessagesStatus(ReceiveMessageAction.Notification, messagesForNotification) 
));