繁体   English   中英

如何添加自定义消息泵支持的参数?

[英]How to add a custom message pump supporting parameters?

这与以下问题有关: 如何创建自定义消息泵?

我基本上需要相同的消息泵,除了它还需要能够支持输入参数。 上面问题的答案仅支持不接受参数的Action()委托。 我希望能够将参数传递给我的动作。 这是无参数版本:

public class MessagePump
{
    private BlockingCollection<Action> actions = new BlockingCollection<Action>();

    public void Run() //you may want to restrict this so that only one caller from one thread is running messages
    {
        foreach (var action in actions.GetConsumingEnumerable())
            action();
    }

    public void AddWork(Action action)
    {
        actions.Add(action);
    }

    public void Stop()
    {
        actions.CompleteAdding();
    }
}

什么是正确的方法? 我正在考虑让BlockingCollection存储一个自定义类而不是Action,比如说ActionWithParameter,它看起来如下:

class ActionWithParameter
{
   Action action;
   object parameter;
}

但这似乎很笨拙,而且在获取操作以弄清楚参数是什么类型时,我还需要一些switch语句,以便能够调用action(parameter)。 如果我想支持多个参数该怎么办? 那我应该使用object[] parameters吗? 当然有更好的解决方案?

在委托线程中找到一个解决方案: 如何将委托存储在列表中

我可以使用以下语法在Action类型中存储函数和参数:

actions.Add(new Action(() => MyFunction(myParameter)));

这也解决了我的多个参数问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM