我喜欢System.Windows.Threading命名空间中的Distpatcher,并希望在类库中使用此对象。但是,由于它是为WPF创建的,并且似乎特定于UI,我觉得我在类库中使用它时滥用其预期目的。
我想知道是否存在其他一些用于相同目的的类(为一个线程创建一个工作项队列),但更适合在类库中使用。基本上我想做的就是创建一个线程,并从另一个线程异步排队一堆代表,让它运行。
我可以很容易地构建一些东西,但我更愿意遵循标准惯例并使用已经证明过的东西。提前谢谢。
答案 0 :(得分:1)
TPL具有可以实例化以处理工作队列的任务计划程序。查看this msdn link。默认情况下使用全局ThreadPool,您应该能够使用以下内容添加任务:
Task myTask = Task.Factory.StartNew( () => { Console.WriteLine("Hello, I'm a queued task."); });
如果您想要更复杂的队列管理,那么您可以实现自己的任务调度程序 - 通过上面的msdn链接有很多例子。
答案 1 :(得分:1)
BlockingCollection
正是您所需要的。 Take
方法阻塞,直到项目出现在队列中,这使得它非常适合这些类型的生产者 - 消费者类场景。
public class Worker
{
private BlockingCollection<Action> m_Queue = new BlockingCollection<Action>();
public Worker()
{
var thread = new Thread(
() =>
{
while (true)
{
Action action = m_Queue.Take();
action();
}
});
thread.IsBackground = true;
thread.Start();
}
public void QueueWorkItem(Action action)
{
m_Queue.Add(action);
}
}