我有一个主线程,它应该处理来自几个工作线程的数据。
但是这些数据不是一个特定的类。
大约有6-7个类,我需要将其中一个类从工作线程传递到主线程。
以前,我只有一个类是通过线程传递的。我在用;
BlockingCollection<MyClass> mainQueu = new BlockingCollection<MyClass>(new ConcurrentQueue<MyClass>());
因此,我将MyClass实例从多个线程推送到mainQueu,主线程试图从mainQueu获取。
但如果我有不止一门课。哪条路更好?
当然,应该有另一个类型为enum的队列,指定将哪个类推送到队列中。主线程总是试图从这个队列中获取信息。一旦任何项目出现,它就会从相关队列中取出。
只有一个主队列,在mainQueue类中,我可以有对象成员。和枚举,它指定对象成员的类型。在推到队列时,我可以将类转换为对象,并且与主线程相比,我可以将其转换回原始类。。
希望这是清楚的。
非常感谢,问候
发布于 2011-02-21 08:11:00
这里有一个有用的技巧,就是让工作人员作为委托队列;例如,Action
。然后调用方可以对适当的方法和(通过捕获的变量)任何必要的状态排队。
例如,假设您有一个void Enqueue(Action)
方法;调用方可以这样做:
queue.Enqueue(targetObject.Method);
(如果targetObject.Method
是一个void Method() {...}
),或者可以这样做:
queue.Enqueue(() => SomeMethod(foo, bar, 123));
(其中foo
和bar
是希望完成工作的代码的本地代码)
因此,我们一次通过了许多状态,而不必考虑类型--仅仅是操作。
https://stackoverflow.com/questions/5063568
复制相似问题