Как использовать делегат в C # для словаря <int, List <string>> - PullRequest
0 голосов
/ 24 апреля 2010

код:

[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)
{
    ...
}

Как я могу отправить две переменные типа ReceiveMessageAction соответственно Dictionary<int, List<string>> в метод ReceivesMessagesStatus.

Спасибо.


У меня есть функция, которая выполняется в потоке. Здесь я создаю объект типа Dictionary <int, List <string>> и, используя делегирование, хочу использовать этот объект в своей форме.

Часть кода выше: [1] Деградация делегированного [2] объект [3] Зов делегата [3] Функция куда объект нужно отправить

Ответы [ 3 ]

2 голосов
/ 24 апреля 2010

Вы можете сделать это типобезопасным без приведения, используя лямбду:

  Invoke(new MethodInvoker(
    () => ReceivesMessagesStatus(ReceiveMessageAction.Notification, messagesForNotification)
  ));
1 голос
/ 24 апреля 2010

Решение:

[1]

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

[2]

private void ReceivesMessagesStatus(ReceiveMessageAction action, Dictionary<int, List<string>> value)
{
    ...
}
1 голос
/ 24 апреля 2010

Вы пробовали использовать значение в качестве словаря? например,

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