首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跨线程传递数据的首选方法

跨线程传递数据的首选方法
EN

Stack Overflow用户
提问于 2011-02-21 08:01:13
回答 1查看 334关注 0票数 1

我有一个主线程,它应该处理来自几个工作线程的数据。

但是这些数据不是一个特定的类。

大约有6-7个类,我需要将其中一个类从工作线程传递到主线程。

以前,我只有一个类是通过线程传递的。我在用;

代码语言:javascript
运行
复制
BlockingCollection<MyClass> mainQueu = new BlockingCollection<MyClass>(new ConcurrentQueue<MyClass>());

因此,我将MyClass实例从多个线程推送到mainQueu,主线程试图从mainQueu获取。

但如果我有不止一门课。哪条路更好?

  1. 为每种类型的类都有一个队列:

当然,应该有另一个类型为enum的队列,指定将哪个类推送到队列中。主线程总是试图从这个队列中获取信息。一旦任何项目出现,它就会从相关队列中取出。

  • 铸造:

只有一个主队列,在mainQueue类中,我可以有对象成员。和枚举,它指定对象成员的类型。在推到队列时,我可以将类转换为对象,并且与主线程相比,我可以将其转换回原始类。。

希望这是清楚的。

非常感谢,问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-21 08:11:00

这里有一个有用的技巧,就是让工作人员作为委托队列;例如,Action。然后调用方可以对适当的方法和(通过捕获的变量)任何必要的状态排队。

例如,假设您有一个void Enqueue(Action)方法;调用方可以这样做:

代码语言:javascript
运行
复制
queue.Enqueue(targetObject.Method);

(如果targetObject.Method是一个void Method() {...}),或者可以这样做:

代码语言:javascript
运行
复制
queue.Enqueue(() => SomeMethod(foo, bar, 123));

(其中foobar是希望完成工作的代码的本地代码)

因此,我们一次通过了许多状态,而不必考虑类型--仅仅是操作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5063568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档