【发布时间】:2017-05-09 14:04:41
【问题描述】:
当我开发多个较小的应用程序时,我注意到我可以在这里或那里使用一个新线程来执行后台任务。我尝试了一些选项,主要是后台工作人员和代表。我想做的是有一个专用的线程类来运行我的所有线程,我可以在多个程序中重复使用它。
我正在寻找关于在哪里阅读或查看或在这种情况下我应该做什么的指导。
我现在失败的例子:
主线程 (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()的任何内容。确定它是否完成并且通知取决于您,但这确实是您的课程。我不确定您是否需要创建自己的线程管理器类,而是将该代码重构为业务对象,从那里您至少可以看到可以为您重构的下一个基类制作什么。 -
听起来你最好使用现有的线程池支持。
-
也许您应该使用异步回调方法来操作 gui 的结果,或者您可以使用面向方面的框架检查或控制您的逻辑、数据等,例如 spring.net aop。
标签: c# .net wpf windows multithreading