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
嗎?當然有更好的解決方案?