c# – 多线程:如何更新UI以指示进度

前端之家收集整理的这篇文章主要介绍了c# – 多线程:如何更新UI以指示进度前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
自2008年圣诞节以来,我一直在研究同一个项目.我被要求从控制台应用程序(只打印跟踪语句)中将它从完整的 Windows应用程序中取出.当然,那没关系.唯一的问题是应用程序的某些部分可能需要几分钟到几乎一个小时才能运行.我需要多线程来显示用户状态或错误.但我不知道从哪里开始.

我已经在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来做到这一点.我是现在唯一使用该应用程序的人,但我想要一个更具吸引力的界面

解决方法

我不认为您指定了您正在使用的CLR的版本,但您可以查看“ BackgroundWorker”控件.这是实现多个线程的简单方法.

最好的部分是它是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.

猜你在找的C#相关文章