多线程程序 - 设计考虑因素

时间:2011-03-07 08:25:47

标签: c# multithreading design-patterns

这可能相当复杂,对于这个罗嗦的问题感到遗憾。

1)我现在要重新设计我的应用程序以使用多个线程(确切地说是Backgroundworkers。)对于特定的gui,我可能会有5或6个bgw。我的第一个问题是,我有一个方法调用,gui需要获取其“核心”数据。然后,该数据的各个部分用于对地点的各种其他调用,这些调用也形成与核心数据显示在同一页面上的数据。我如何与各种后台工作人员一起处理这个问题,以便后工作者1获取核心数据,后工作者2使用核心的特定项目来获取更多数据,后工作者3使用一些核心数据等等?从而使我的gui和主线程处于解锁状态

2)正如我之前所说,gui必须先获取一组核心数据,然后再进行一些其他数据库调用以获取其余的重要数据。正如我所见,我需要在gui构造函数之外获取这些数据,因此在创建gui时没有如此大的需求。在设计意义上,我应该如何构建我的gui,以便它可以访问数据,然后只需要在创建时显示相对于,访问然后显示的数据?

我希望这些不是太冗长的问题吗?我已经可以看到,很多这都归结为程序设计,作为一个新手是非常困难的(当然我认为)。希望有人能告诉我他们在这种情况下会做些什么。

由于

2 个答案:

答案 0 :(得分:1)

这听起来像是一个工作队列的好任务。这背后的主要思想是将一个工作项添加到队列中,并且该工作项将具有相关的功能来处理数据。该工作通常分发给您指定的任意数量的线程。

其中有几个存在,只是google for it。

答案 1 :(得分:0)

您是否看过.net 4任务并行库? Task Parallel Library
查看几乎在页面中间创建任务连续的区域。

这是链接网站的示例

Task<byte[]> getData = new Task<byte[]>(() => GetFileData());
Task<double[]> analyzeData = getData.ContinueWith(x => Analyze(x.Result));
Task<string> reportData = analyzeData.ContinueWith(y => Summarize(y.Result));
getData.Start();

System.IO.File.WriteAllText(@"C:\reportFolder\report.txt", reportData.Result);

//或...

Task<string> reportData2 = Task.Factory.StartNew(() => GetFileData())
                                        .ContinueWith((x) => Analyze(x.Result))
                                        .ContinueWith((y) => Summarize(y.Result));

System.IO.File.WriteAllText(@"C:\reportFolder\report.txt", reportData.Result);