`
fuerbosi
  • 浏览: 469750 次
文章分类
社区版块
存档分类
最新评论

C#多线程BackgroundWorker使用示例

 
阅读更多

using System;
using System.Collections.Generic;
using System.ComponentModel;////
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace BackgroundWorkerSample
{
<wbr><wbr><wbr> public partial class CalculateAddForm : Form<br><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> protected BackgroundWorker backgroundWorker1 = new BackgroundWorker();<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> //private int numberToCompute = 0;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> //private int highestPercentageReached<wbr> = 0;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> public CalculateAddForm()<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> InitializeComponent();</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> InitializeBackgoundWorke<wbr>r();<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> // Set up the BackgroundWorker object by<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> // attaching event handlers.<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> private void InitializeBackgoundWorke<wbr>r()<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> this.backgroundWorker1.WorkerReportsProgress = true;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> this.backgroundWorker1.WorkerSupportsCancellati<wbr>on = true;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> this.backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHand<wbr>ler(backgroundWorker1_ProgressChanged);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventH<wbr>andler(backgroundWorker1_RunWorkerCompleted);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> private long ComputeAdd(int n, BackgroundWorker worker, DoWorkEventArgs e)<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> long result = 0;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> // Abort the operation if the user has canceled.<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> // Note that a call to CancelAsync may have set<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> // CancellationPending to true just after the<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> // last invocation of this method exits, so this<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> // code will not have the opportunity to set the<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> // DoWorkEventArgs.Cancel flag to true. This means<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> // that RunWorkerCompletedEventA<wbr>rgs.Cancelled will<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> // not be set to true in your RunWorkerCompleted<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> // event handler. This is a race condition.</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> for (int i = 1; i &lt;= n; i++)<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> if (worker.CancellationPending)<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> e.Cancel = true;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> break;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> }<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> else<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> result += i;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> Thread.Sleep(100);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> // Report progress as a percentage of the total task.<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> int percentComplete = (int)((float)i / (float)n * 100);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> worker.ReportProgress(percentComplete);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> }<br><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

分享到:
评论

相关推荐

    C# winform多线程模板示例,winform多线程例子,C#

    通过这个C# WinForm多线程模板示例,开发者可以学习到如何优雅地处理后台任务,保持UI响应,并理解多线程编程中的核心概念。同时,了解如何利用线程同步机制以及异步编程模型,能够更好地优化应用程序的性能和用户...

    C#多线程刷新界面

    标题"**C#多线程刷新界面**"指出了我们讨论的核心问题:如何在C#中利用多线程来更新用户界面。在Windows Forms或WPF应用程序中,主线程通常负责处理UI事件,而当主线程被其他长时间运行的任务占用时,用户界面就会变...

    用C#语言编写的一个多线程示例

    在C#编程中,多线程是一项核心技能,它允许程序同时执行多个任务,从而提高应用程序的效率和响应性。本示例将深入探讨如何在C#中创建和管理线程,以及它带来的优势和挑战。 一、多线程概念 多线程是指在一个进程内...

    c# BackGroundWorker 多线程操作的小例子

    在C#编程中,`BackGroundWorker`组件是.NET Framework提供的一种用于实现多线程操作的工具,尤其适合于在用户界面(UI)线程上执行长时间运行的任务,避免阻塞UI,提升用户体验。本小例子展示了如何巧妙地运用`...

    简洁实用的C#多线程异步实例

    本文将深入探讨C#中的多线程异步实例,并以提供的"简洁实用的C#多线程异步实例"(AsynchUI)为切入点,帮助初学者更好地理解和应用这些概念。 首先,让我们了解什么是多线程。多线程是指在一个进程中同时执行多个...

    WinForm BackgroundWorker完美示例

    本示例完美演示了如何使用BackgroundWorker进行耗时的操作(如下载和数据库事务)。示例中,指定圆周率pi的结果位数,即可计算对应的pi的值,并实时输出当前计算的结果。由于采用多线程,用户体验非常好。

    C# 多线程详细教程及示例

    **C# 多线程详细教程及示例** 在编程领域,多线程技术是提高程序性能和响应性的重要手段,特别是在处理大量并发任务时。C#作为一种强大的.NET框架下的编程语言,内置了丰富的多线程支持。本教程将深入探讨C#中多...

    C# winform多线程模板示例,winform多线程例子,C#源码.zip

    4. 使用`BackgroundWorker`组件,提供事件驱动的多线程处理,易于管理和控制。 总结来说,C# WinForms中的多线程编程能显著提升用户体验,通过合理地划分任务和使用线程同步机制,可以避免UI阻塞,同时提高程序的...

    C#多线程实现文件下载实例+主要功能代码结构手册

    本教程将探讨如何使用C#来实现多线程文件下载的实例,帮助开发者更好地理解和剖析项目源码,从而提升编程技能。 首先,理解多线程的概念至关重要。在单线程环境中,程序执行是顺序的,而多线程允许程序同时执行多个...

    winform_c#_多线程例子

    本项目"winform_c#_多线程例子"显然是一个演示如何在Winform应用中正确使用多线程的示例。 多线程允许应用程序同时执行多个不同的任务,提高程序的并发性和效率。在Winform中,主线程主要负责用户界面的交互,而...

    C#多线程控件安全调用示例

    本示例将深入探讨如何在C#中安全地在多线程环境中调用控件,以确保程序的稳定性和正确性。 首先,了解线程同步的概念至关重要。线程同步是控制多个线程对共享资源访问的一种方法,以防止数据竞争和其他并发问题。在...

    C#多线程实现进度条操作

    "C#多线程实现进度条操作" 在C#中实现多线程例子时,经常会遇到一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示。在运行中...

    c#多线程学习代码资料

    总结,本资料“C#多线程学习代码资料”会涵盖这些知识点,并通过示例代码帮助初学者理解多线程的创建、同步、通信以及异常处理等概念,是学习C#多线程编程的良好起点。通过深入学习和实践,开发者能够更好地掌握多...

    C#数据访问加速模块.rar_c#多线程

    压缩包中的“互动.NET.txt”可能包含了关于.NET框架和C#多线程的讨论或示例,可能涵盖了.NET的线程池(ThreadPool)、线程局部存储(ThreadLocal)、线程间通信(Interlocked操作、事件、信号量等)以及如何利用.NET提供的...

    C#的BackgroundWorker控件

    【C#的BackgroundWorker控件】是.NET框架中用于实现多线程操作的重要组件,尤其在用户界面(UI)更新和后台任务执行方面起到关键作用。它的主要目标是在不阻塞用户界面的情况下运行耗时的任务,提升应用程序的响应性...

    C#实现多线程与进度条

    以下是一个简单的示例,展示了如何使用`BackgroundWorker`实现带进度条的多线程任务: ```csharp public partial class MainForm : Form { public MainForm() { InitializeComponent(); backgroundWorker....

    C# Winform线程创建子窗体

    在C# Winform开发中,多线程技术是不可或缺的一部分,尤其当涉及到用户界面(UI)的异步操作时。线程允许程序同时执行多个任务,提高应用的响应性和效率。本话题将深入探讨如何利用线程来延迟创建子窗体,并且如何安全...

    C#下WINFORM和WINCE多线程编程

    - **Progress Bar和BackgroundWorker**:提供进度指示和异步操作支持,适合在多线程环境中使用。 4. **在WinCE中使用多线程** - **WinCE线程特性**:WinCE系统资源有限,线程管理更为重要。应合理控制线程数量,...

    多线程下载示例(C#)

    在C#编程中,多线程技术是一种提升应用程序性能的有效方式,特别是在处理耗时操作如大文件下载时。本文将深入探讨如何利用C#实现多线程下载,并以"DownloadTest"为例,介绍其实现过程。 多线程下载的基本原理是将一...

    c# 2005线程示例

    在C# 2005中,线程是并发编程...理解并熟练掌握这些线程相关知识对于任何C#开发者来说都是至关重要的,尤其是在开发多线程应用或优化性能时。通过实践这些示例,C#初学者能够更好地理解和运用线程,从而提升编程技能。

Global site tag (gtag.js) - Google Analytics