我怎样才能同时执行不同的方法?
问题描述:
在我的应用程序中,我使用了一个数据集和4个方法,如下所示。我怎样才能同时执行不同的方法?
Dataset ds=new Dataset();
ds=businesslogiclayerObject.method1(a,b,c,d);
ds=businesslogiclayerObject.method2(a,b,c,d,e);
ds=businesslogiclayerObject.method3(a,b,c,d,e,f);
ds=businesslogiclayerObject.method4(a,b,c,d,e,f,g,h);
(A,B,C,d,E,F,G,H)的参数,以存储过程中Businesslogic层。到目前为止,我没有实现任何线程概念,因此它们正在逐一执行。这需要花费很多时间才能在数据集中获取结果集。
如何在同一时间执行4种以上的方法?
帮助我。
问候, N.SRIRAM
答
由于您使用的是.NET 3,因此您可以使用BackgroundWorker,因为这样可以解决您的UI线程的编组工作以及一些其他线程复杂性问题。它不会照顾锁定;所以一定要根据需要解决锁定问题。
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(OnGrabData);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(OnGrabDataCompleted);
worker.RunWorkerAsync(new DataClass(a,b,c,d,e,f,g));
DataClass
可以封装您的参数,你的存储过程将随后访问或者或许你可以通过一个delegate
与能那么BackgroundWorker
内调用的参数。无论哪种方式,BackgroundWorker
应该足以在这个例子中提供简单的线程行为。
答
,如果你的“businesslayer”执行某种SQL数据库和返回,你可以重写一个批次执行所有SQL语句的数据集;分离每个单独的sql/sproc调用;
结果数据集将为每个单独的sql有一个数据表。
答
首先,有考虑几件事情:
- 的方法将永远不会真正执行的同时
- 总执行时间将 可能是当 顺序执行比我的大。
- 您应该评估执行的订单 是否相关。
如果这不是问题(例如,如果你只是想在后台处理呼叫),那么有几个选项。最简单的可能是使用线程池,使用ThreadPool.QueueUserWorkItem()
或使用BackgroundWorker
。
根据您的具体需求,您可以获取所需的参数列表或字典,或定义一个单独的状态对象,这样做:在与代码行的开头
Dictionary<string, object> parameters = new Dictionary<string, object>
parameters.Add("a", 42);
parameters.Add("b", new object());
parameters.Add("c", null);
ThreadPool.QueueUserWorkItem((state) => { do stuff with "state" }, parameters);.
使用4个空格对他们申请格式。这会让大家更容易阅读你的问题。 – Kendrick 2011-01-25 17:20:12