Action.Invoke对一个实例化的类?

时间:2014-10-23 08:19:23

标签: c# action invoke

基本上我正在做的是创建一个临时缓冲区,将数据写入byte [],然后返回缓冲区的大小;然后,我使用它来尝试通过网络对我的代码进行解除分段。 (试图让我的C#客户端与Netty的FrameDecoder类一起正常工作)

基本上,一旦找到缓冲区大小(动态)

,我就会将我的所有动作存储在列表中以通过网络调用
      public void SendBuffer(DataOutputStream ClientOuput)
      {
                ClientOuput.WriteInt(GetBufferSize());
                foreach (Action a in executionList)
                {
                         // What Do?
                }
      }

我的问题是我需要调用DataOutputStream中通过SendBuffer参数传递的方法,所以像

这样的东西
ClientOutput.a.invoke();

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

不清楚你在问什么,但无论如何我试着回答。那么你有一堆你希望由DataOutputStream实例执行的动作(在某处定义)?然后你可以做类似的事情:

public async void SendBuffer(DataOutputStream clientOuput)
{
    var executionList = new List<Action>()
        {
            () => { Debug.WriteLine("whatyousay"); Thread.Sleep(1500); },
            () => { Debug.WriteLine("allyourbase"); Thread.Sleep(1500); },
        };

    clientOuput.WriteInt(1);
    foreach (Action action in executionList)
        await clientOuput.Execute(action);

    Debug.WriteLine("arebelongtous");
}

此处DataOutputStream只是

public class DataOutputStream
{
    // await and actions will be executed in given order, non-blocking
    public Task Execute(Action action)
    {
        return Task.Run(action);
    }

    // fire & forget, non-blocking
    public void BeginInvoke(Action action)
    {
        action.BeginInvoke(callback => {}, null);
    }

    // blocking
    public void Invoke(Action action)
    {
        action.Invoke();
    }

    public void WriteInt(int integer)
    {
        Debug.WriteLine("int:{0}", integer);
    }
}