C#多執行緒 BackgroundWorker類使用小例-WPF程式
1.程式實現了一個簡單的使用了BackgroundWorker類的WPF程式,用於在後臺執行緒給進度條賦值。
執行結果如下:
後臺執行緒正常執行結束:
後臺執行緒中途被取消:
2.程式僅修改了 MainWindow.xaml 檔案和 MainWindow.xaml.cs 檔案,兩個檔案內容如下
MainWindow.xaml 檔案:
<Window x:Class="SimpleWorker.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="150" Width="250"> <StackPanel> <ProgressBar Name="progressBar" Height="20" Width="200" Margin="10"></ProgressBar> <Button Name="btnProcess" Width="100" Click="btnProcess_Click" Margin="5">開始後臺任務</Button> <Button Name="btnCancel" Width="100" Click="btnCancel_Click" Margin="5">取消後臺任務</Button> </StackPanel> </Window>
ainWindow.xaml.cs 檔案:
using System.Windows; using System.ComponentModel; using System.Threading; namespace SimpleWorker { /// <summary> /// MainWindow.xaml 的互動邏輯 /// </summary> public partial class MainWindow : Window { BackgroundWorker bgWorker = new BackgroundWorker(); public MainWindow() { InitializeComponent(); bgWorker.WorkerReportsProgress = true; bgWorker.WorkerSupportsCancellation = true; bgWorker.DoWork += DoWork_Handler; bgWorker.ProgressChanged += ProgressChanged_Handler; bgWorker.RunWorkerCompleted += RunWorkerCompleted_Handler; } private void btnProcess_Click(object sender,RoutedEventArgs e) { if (!bgWorker.IsBusy) { bgWorker.RunWorkerAsync(); } } private void ProgressChanged_Handler(object sender, ProgressChangedEventArgs args) { progressBar.Value = args.ProgressPercentage; } private void DoWork_Handler(object sender,DoWorkEventArgs args) { BackgroundWorker worker = sender as BackgroundWorker; for (int i = 1; i <= 10; i++) { if (worker.CancellationPending) { args.Cancel = true; break; } else { worker.ReportProgress(i*10); Thread.Sleep(500); } } } private void RunWorkerCompleted_Handler(object sender,RunWorkerCompletedEventArgs args) { progressBar.Value = 0; if (args.Cancelled) { MessageBox.Show("後臺任務已經被取消。", "訊息"); } else { MessageBox.Show("後臺任務正常結束。","訊息"); } } private void btnCancel_Click(object sender,RoutedEventArgs e) { bgWorker.CancelAsync(); } } }
相關推薦
C#多執行緒 BackgroundWorker類使用小例-WPF程式
1.程式實現了一個簡單的使用了BackgroundWorker類的WPF程式,用於在後臺執行緒給進度條賦值。 執行結果如下: 後臺執行緒正常執行結束: 後臺執行緒中途被取消: 2.程式僅修改了 MainWindow.xaml 檔案和 MainWindow.xaml.
C++多執行緒安全類的問題
我們是多麼渴望各種C++類都是多執行緒安全的,然而一旦涉及到物件間的互動,這樣的渴望可能就只能是奢望了。下面,我們以設計一個雙向鏈結點為例,看看要使其多執行緒安全將會帶來一些什麼問題。 class DoublyLinedNode{ DoublyLinedNode* pPrev
c# 多執行緒使用佇列順序寫日誌的類 (需要再優化)
using System; using System.Collections.Generic; using System.Threading; public class LogManager { /// <summary> /// 建構函式 /// </su
C#多執行緒基礎知識和小實踐
源文來源 :http://www.cnblogs.com/jackson0714/p/5100372.html 一、多執行緒介紹 C#通過多執行緒支援並行執行的程式碼。一個執行緒是一個獨立執行的路徑,可以同時與其他執行緒一起執行。一個C#客戶端程式(Console,WPF,W
簡單的Linux C++多執行緒CLOCK(時鐘)類
剛剛加入CSDN部落格,初來乍到也不知道寫什麼,所以來分享一個自己以前學C++的時候寫的第一個類,一個關於時鐘的簡單的Linux多執行緒CLOCK(時鐘)類: /***********************************************
C# 多執行緒啟動和管理 單例模式
1. List<Task> taskList = new List<Task>(); TaskFactory t
C# 多執行緒九之Timer類
1、簡介 相信寫過定時任務的小夥伴都知道這個類,非常的輕量級,而且FCL中大量的類使用了這個方法,比如CancellationTokenSource的CancelAfter就是用Timer去做的. 當然FCL中大量的使用了Timer,說明MS對Timer類是信任的.下面就開始介紹這個類的用法.簡介很少
類的多執行緒下實現單例類
這兩天在看自己之前寫的程式碼,所以正好把用過的東西整理一下,單例模式,在日常的程式碼工作中也是經常被用到, 所以這裡把之前用過的不同方式實現的單例方式整理一下
多執行緒 繼承Thread類 實現Runnable介面 多執行緒安全 synchronized 單例設計懶漢 鎖死
程序 是一個正在執行中的程式。 每個程序執行都有一個執行順序,該順序是一個執行路徑,或者叫一個控制單元。 舉例子:一個程序,就是一個正在執行的程式。 執行緒 就是程序中的一個獨立的控制單元。 執行緒在
Win32下兩種用於C++的執行緒同步類(多執行緒實現加鎖解鎖)
使用Win32提供的臨界區可以方便的實現執行緒鎖: // 全域性: CRITICAL_SECTION cs; InitializeCriticalSection( & cs); // 執行緒1: EnterCriticalSection(
C#多執行緒程式設計筆記(2.5)-使用CountDownEvent類
近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^using System; using System.Threading; namespace CountDownEvent_Test { class Pr
C#多執行緒程式設計筆記(2.7)-使用ReaderWriterLockSlim類
近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^using System; using System.Collections.Generic; using System.Threading; namespace
C#多執行緒程式設計筆記(2.1)-使用Mutex類
近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^Mutex是一種原始的同步方法,其只對一個執行緒授予對共享資源的獨佔訪問using System; using System.Threading; namespac
C# 單執行緒和多執行緒下的單例模式的實現
該單例模式是執行緒不安全的,只能在單執行緒下執行,在多執行緒中如果被兩個執行緒同時呼叫Instance屬性時,此時兩個執行緒判斷 if (_instance==null)時都會返回true,就會建立兩個例項。public class Singleton{ /// <
C#多執行緒開發10:執行緒同步之Semaphore類
Semaphore類表示訊號量。 訊號量和互斥類似,只是訊號量可以同時由多個執行緒使用,而互斥只能由一個執行緒使用。也就是說,使用訊號量時,可以多個執行緒同時訪問受保護的資源。下面例項演示了“學生到食
C++多執行緒程式設計(執行緒類)
簡述 通過執行緒類來管理執行緒,實現業務邏輯與執行緒管理分離 原始碼 介面類 SFRunnable.h class SFRunnable { public: virtual ~SFRunnable() {}; vi
C#多執行緒程式設計筆記(2.6)-使用Barrier類
近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^using System; using System.Threading; namespace Barrier_Test { class Program
C# 多執行緒計時器類。
該例子是一個封裝的計時器類。 實現功能: (1)傳入一個時間 HH:mm:ss 字串 和 label控制元件物件 即可實現控制元件倒計時。 三行程式碼即可執行,如下圖效果: 當然,每個專案需要的需求不同,這裡只是拋磚引玉。 下面貼出我的程式碼,歡迎討論。 完整程式碼
C#多執行緒程式設計筆記(2.8)-使用SpinWait類
近來在學習Eugene Agafonov編寫的《C#多執行緒程式設計實戰》(譯),做些筆記也順便分享一下^-^using System; using System.Threading; namespace SpinWait_Test { class Program
c++靜態程式碼實現多執行緒安全的單例模式
開發十年,就只剩下這套架構體系了! >>>