2014-03-25 40 views
0

這涉及到這樣一個問題: How to create custom message pump?如何添加支持參數的自定義消息泵?

我基本上需要相同的消息泵,但它也需要能夠支持輸入參數。上述問題的答案僅支持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存儲自定義類,而不是行動,讓我們說叫ActionWithParameter,它看起來如下所示:

class ActionWithParameter 
{ 
    Action action; 
    object parameter; 
} 

但它只是似乎笨重,再加上獲取的,當我還需要一些switch語句行動來找出什麼類型的參數,以便能夠調用行動(參數)。另外如果我想支持多個參數呢?我應該使用object[] parameters嗎?當然有更好的解決方案?

回答

1

發現在一個委託線程解決方案: How to store delegates in a List

我可以同時存儲功能,並通過使用以下語法:

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

在行動中的參數類型這也解決了我的問題多個參數。

相關問題