我已经在WPF中构建了一个小UI.这是非常基本的,但我想根据需要扩展它.该应用程序通过选择源,选择目标,然后单击开始来工作.我希望随着流程的进行更新列表框.与sql Server安装的方式大致相同,每个步骤在完成时都会根据其名称生成绿色复选标记.
新手如何开始多线程?我应该查看哪些图书馆?任何建议将不胜感激.
附:我正在读这个图书馆,http://www.codeplex.com/smartthreadpool
@Martin:这是我的应用程序的构建方式:
>引擎:以预定义的顺序运行所有主要组件
> Excel:我编写的库包装COM来打开/读取/关闭/保存工作簿
>图书馆:了解不同类型工作簿格式的图书馆(共5册)
>业务类:我编写的类用于翻译Excel数据并为Access准备
> Db Library:我编写的一个库,它使用ADO.NET读取Access数据
> AppSettings:你明白了
> Serialier:在应用程序崩溃的情况下保存数据
我使用从LINQ到ADO.NET的所有内容来获取数据,转换它,然后输出它.
我的主要要求是我想更新我的UI以指示进度
@Frank:如果后台工作程序中的某些内容抛出异常(已处理或以其他方式)会发生什么?我的申请如何收到通知?
@Eric Lippert:是的,我现在在调查.在我复杂化之前.
如果您需要更多信息,请告诉我.目前我已经从单元测试运行这个应用程序,所以我想callig它是一个控制台应用程序是不正确的.我使用Resharper来做到这一点.我是现在唯一使用该应用程序的人,但我想要一个更具吸引力的界面
解决方法
最好的部分是它是a part of the CLR 2.0 and up
更新以响应您的更新:如果您希望能够更新UI中的进度 – 例如在进度条中 – 后台工作人员是完美的.它使用我认为被称为的事件:ProgressChanged来报告状态.它非常优雅.另外,请记住,您可以拥有所需的实例数,并且可以同时执行所有实例(如果需要).
回答您的问题:您可以轻松设置示例项目并测试您的问题.我确实找到了以下内容,here(在备注中,谨慎的第2段):
If the operation raises an exception that your code does not handle,the BackgroundWorker catches the exception and passes it into the RunWorkerCompleted event handler,where it is exposed as the Error property of System.ComponentModel..::.RunWorkerCompletedEventArgs.