当我开发多个较小的应用程序时,我注意到我可以在这里或那里使用新的线程进行后台任务。我已经尝试了几个选项,主要是后台工作人员和代表。我想要做的是有一个专用的线程类来运行我的所有线程,我可以在多个程序中重用。创建一个类来处理线程
我正在寻找有关在这种情况下阅读或查看或应该做什么的指导。我现在该怎么失败
例子:
主线程(GUI)开始 用户点击按钮1,它通过一些逻辑进入和启动多个任务密集型计算(这将冻结GUI直到计算完成)。
我希望做的是看成是这样的..
主线程(GUI)开始 用户点击按钮1创建将在排队的某种 GUI线程的报告清单作为线程过程进度线程计算 线程在 (可能?)线程完成和出队稍后有线程类循环在后台等待项目排队和处理,因为它走了。
我的小任务,典型的方法是
Thread fooThread= new Thread((ThreadStart)delegate
{
//command
});
fooThread.Start();
问题是,我的按钮事件有更多的项目在他们(也许我应该重构呢?)
样品
private void btnCopy_Click(object sender, EventArgs e)
{
//check file exists, check destination exists, etc
//start new thread
Thread fooThread= new Thread((ThreadStart)delegate
{
//copy files to destination using method foobarCopy(params)
});
fooThread.Start();
//if file copy is successful, inform user on GUI.
}
我我主要使用.NET2.0,但根据需要可能会达到4.5。
您按钮点击中的代码应该可能是您的班级。 'FileCopier'或任何带有'Start()'的。确定它是否已完成并且通知取决于您,但这真的是您的课程。我不确定你需要创建自己的线程管理器类,而是将该代码重构为业务对象,并且从那里你至少可以看到下一个重构的基类中可以做些什么。 – TyCobb
听起来像使用现有的线程池支持会更好。 –
也许您应该使用异步回调方法来处理gui的结果,或者您可以使用面向方面的框架检查或控制您的逻辑,数据等,如spring.net aop。 – FreeMan