Может ли делегат нести параметры? - PullRequest
4 голосов
/ 18 января 2010

Допустим, у меня есть функция

public void SendMessage(Message message)
{
   // perform send message action
}

Могу ли я создать делегата для такого рода функции? Если так, как я могу передать сообщение, когда использую делегата?

В моем случае эта функция используется Thread. Всякий раз, когда происходит событие, мне нужно отправить сообщение на сервер, чтобы сохранить запись. Мне также нужно, чтобы он работал в фоновом режиме, чтобы он не влиял на приложение. Тем не менее, поток должен использовать делегат

Thread t = new Thread(new ThreadStart(SendMessage));

и я не знаю, как передать сообщение делегату. Спасибо.

Ответы [ 5 ]

11 голосов
/ 18 января 2010

Sure

public delegate void DelWithSingleParameter(Message m);

Передача сообщения может быть сделана со следующим

DelWithSingleParameter d1 = new DelWithSingleParameter(this.SomeMethod);
d1(new Message());

Также, как @Mehrdad указал в более новых версиях фреймворка, вам больше не нужно определять таких делегатов. Вместо этого используйте существующий делегат Action<T> для этого типа операции.

Action<Message> d1 = new Action<Message>(this.SomeMethod);
d1(new Message());
3 голосов
/ 18 января 2010

конечно, просто определите делегата таким образом:

 delegate void SendMessageDelegate(Message message);

Тогда просто вызовите его как обычно:

 public void InvokeDelegate(SendMessageDelegate del) 
 {
      del(new Message());
 }
2 голосов
/ 18 января 2010

Вам необходимо использовать ParametizedThreadStart. Смотрите здесь:

http://msdn.microsoft.com/en-us/library/system.threading.parameterizedthreadstart.aspx

1 голос
/ 18 января 2010

Конечно, см. здесь для примера.

0 голосов
/ 19 января 2010

Вы также можете сделать что-то подобное

object whatYouNeedToPass = new object();

Thread t = new Thread( () => 
{
    // whatYouNeedToPass is still here, you can do what ever you want :)
});

t.Start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...