在我的应用程序中,我使用的是数据集和下面的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
答案 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)
首先,几乎没有什么可以考虑的事情:
如果这不是问题(例如,如果您只想在后台处理呼叫),那么有几个选项。最简单的可能是使用线程池,使用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);.