ibcadmin 发表于 2019-8-16 12:28:58

C#之BackgroundWorker从简单入门到深入精通的用法总结

<p><strong>需求分析</strong></p>
<p style="text-indent: 2em;">经常用到的耗时操作,例如:</p>
<p style="margin-left: 30px;">1、文件下载和上载(包括点对点应用步伐传输文件,从网络下载文件、图像等)<br />2、数据库事务(从数据库读到大量的数据到WinForm界面中的DataGridview里呈现)<br />3、复杂的本地计算<br />4、本地磁盘文件访问(读写文件,磁盘文件列表)<br />……</p>
<p style="text-indent: 2em;">这些操作在长时间运行时会导致用户界面 (UI) 处于停止响应状态,用户在这操作期间无法进行其他的操作,造成非常差的用户体验,为了不使UI层处于停止响应状态,则可以使用 BackgroundWorker 类方便地办理这类问题。这个后台的线程处理,可以很好的实现常规操作的同时,还可以及时通知UI当前处理信息的进度等。</p>
<p><br /><strong>MSDN的介绍</strong></p>
<p style="text-indent: 2em;">BackgroundWorker是.NET Framework 里用来执行多线程任务的控件,它允许开辟人员在一个单独的线程上执行一些操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。 如果您需要能进行响应的用户界面,而且面对与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地办理问题。</p>
<p style="text-indent: 2em;">若要在后台执行耗时的操作,请创建一个 BackgroundWorker,侦听那些报告操作进度并在操作完成时发出信号的事件。 可以通过编程方式创建 BackgroundWorker,也可以将它从“工具箱”的“组件”选项卡中拖到窗体上。 如果在 Windows 窗体设计器中创建 BackgroundWorker,则它会出如今组件栏中,而且它的属性会显示在“属性”窗口中。</p>
<p style="text-indent: 2em;">若要为后台操作做好准备,请添加 DoWork 事件的事件处理步伐。 在此事件处理步伐中调用耗时的操作。 若要开始此操作,请调用 RunWorkerAsync。 若要收到进度更新的通知,请处理 ProgressChanged 事件。 若要在操作完成时收到通知,请处理 RunWorkerCompleted 事件。</p>
<p>有2点需要注意的:</p>
<p style="margin-left: 30px;">1、由于DoWork事件内部的代码运行在非UI线程之上,确保在 DoWork 事件处理步伐中不操作任何用户界面对象。 而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。<br /> 2、BackgroundWorker 事件不跨 AppDomain 边界进行封送处理。 请不要使用 BackgroundWorker 组件在多个 AppDomain 中执行多线程操作。</p>
<p> </p>
<p><strong>最简单示例</strong></p>
<p> </p><br><br /><br /><br />来源:<a href="https://www.cnblogs.com/netserver/p/11363080.html" target="_blank">https://www.cnblogs.com/netserver/p/11363080.html</a>
页: [1]
查看完整版本: C#之BackgroundWorker从简单入门到深入精通的用法总结