이이 질문에 관련이있다 : 그것은 또한 입력 매개 변수를 지원 할 수 있어야 제외 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;
}
그러나 그것은 단지 투박한 것, 플러스를 가져올 때 나는 또한 약간의 스위치 문이 필요합니다 조치 (매개 변수)를 호출 할 수 있도록 매개 변수가 어떤 유형인지 파악하는 조치. 또한 여러 매개 변수를 지원하려면 어떻게해야합니까? 그럼 object[] parameters
을 사용해야합니까? 확실히 더 나은 해결책이 있습니까?