如何同时执行不同的方法?

时间:2011-01-25 17:17:29

标签: c#-3.0

在我的应用程序中,我使用的是数据集和下面的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 Layer中存储过程的参数。直到现在我没有实现任何线程概念,因此它们逐个执行。这需要花费大量时间才能在数据集中获得结果集。

如何同时执行上述4种方法?

帮助我。

此致 N.SRIRAM

3 个答案:

答案 0 :(得分:0)

如果你的“businesslayer”执行某种sql并返回一个数据集,你可以重写它来执行一个批处理的所有sql语句;用;

分隔每个单独的sql / sproc调用

result-dataset将为每个单独的sql提供数据表。

答案 1 :(得分:0)

由于您使用的是.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都应该足以提供简单的线程行为。

答案 2 :(得分:0)

首先,几乎没有什么可以考虑的事情:

  1. 这些方法实际上永远不会同时执行
  2. 总执行时间 可能比什么时候更大 顺序执行。
  3. 您应该评估订单 执行是相关的。
  4. 如果这不是问题(例如,如果您只想在后台处理呼叫),那么有几个选项。最简单的可能是使用线程池,使用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);.