代表可以携带参数吗?

时间:2010-01-18 19:36:22

标签: c# parameters delegates

假设我有一个功能

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

我可以为这种功能创建委托吗?如果是这样,我如何在使用委托时传递消息?

在我的例子中,Thread使用该函数。每当有事件发生时,我都需要向服务器发送一条消息,以保存记录。我还需要让它在后台运行,这样它就不会影响应用程序。但是,线程需要使用委托

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

我不知道如何将消息传递给委托。感谢。

5 个答案:

答案 0 :(得分:11)

不确定

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());

答案 1 :(得分:3)

当然,只需这样定义委托:

 delegate void SendMessageDelegate(Message message);

然后像往常一样调用它:

 public void InvokeDelegate(SendMessageDelegate del) 
 {
      del(new Message());
 }

答案 2 :(得分:2)

答案 3 :(得分:1)

当然,请参阅here以获取示例。

答案 4 :(得分:0)

你也可以这样做

object whatYouNeedToPass = new object();

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

t.Start();