<Window x:Class="WpfApp53.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp53" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <ListBox Grid.Row="0" x:Name="listBox1"/> <ProgressBar Grid.Row="1" x:Name="progressBar1" Height="20" Margin="5"/> <StackPanel Grid.Row="2" Orientation="Horizontal" Margin="5"> <TextBlock Text="Status: "/> <TextBlock x:Name="statusTextBox"/> </StackPanel> <Grid Grid.Row="3" Margin="10"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Button Grid.Column="0" x:Name="startBtn" Content="Start" Click="StartBtn_Click"/> <Button Grid.Column="1" x:Name="cancelBtn" Content="Cancel" Click="CancelBtn_Click"/> </Grid> </Grid></Window>
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Linq; 5 using System.Text; 6 using System.Threading; 7 using System.Threading.Tasks; 8 using System.Windows; 9 using System.Windows.Controls;10 using System.Windows.Data;11 using System.Windows.Documents;12 using System.Windows.Input;13 using System.Windows.Media;14 using System.Windows.Media.Imaging;15 using System.Windows.Navigation;16 using System.Windows.Shapes;17 18 namespace WpfApp5319 {20 /// <summary>21 /// Interaction logic for MainWindow.xaml22 /// </summary>23 public partial class MainWindow : Window24 {25 BackgroundWorker bgWorker;26 public MainWindow()27 {28 InitializeComponent();29 cancelBtn.IsEnabled = false;30 }31 32 private void StartBtn_Click(object sender, RoutedEventArgs e)33 {34 listBox1.Items.Clear();35 startBtn.IsEnabled = false;36 cancelBtn.IsEnabled = true;37 bgWorker = new BackgroundWorker();38 bgWorker.DoWork += BgWorker_DoWork;39 bgWorker.ProgressChanged += BgWorker_ProgressChanged;40 bgWorker.RunWorkerCompleted += BgWorker_RunWorkerCompleted;41 bgWorker.WorkerReportsProgress = true;42 bgWorker.WorkerSupportsCancellation = true;43 44 int maxItems = 50;45 progressBar1.Minimum = 1;46 progressBar1.Maximum = 100;47 48 statusTextBox.Text = "Starting...";49 bgWorker.RunWorkerAsync(maxItems);50 }51 52 private void BgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)53 {54 if(e.Cancelled)55 {56 statusTextBox.Text = "Cancelled";57 }58 else59 {60 statusTextBox.Text = "Completed";61 }62 statusTextBox.IsEnabled = true;63 cancelBtn.IsEnabled = false;64 }65 66 private void BgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)67 {68 double percent = (e.ProgressPercentage * 100) / 50;69 progressBar1.Value = https://www.cnblogs.com/Fred1987/p/Math.Round(percent, 0);70 listBox1.Items.Add(new ListBoxItem { Content = e.ProgressPercentage + " item added" });71 statusTextBox.Text = Math.Round(percent, 0) + "% percent completed";72 }73 74 private void BgWorker_DoWork(object sender, DoWorkEventArgs e)75 {76 int? maxItems = e.Argument as int?;77 for(int i=1;i<=maxItems.GetValueOrDefault();i++)78 {79 if(bgWorker.CancellationPending)80 {81 e.Cancel = true;82 break;83 }84 Thread.Sleep(200);85 bgWorker.ReportProgress(i);86 }87 }88 89 private void CancelBtn_Click(object sender, RoutedEventArgs e)90 {91 bgWorker.CancelAsync();92 startBtn.IsEnabled = true;93 }94 }95 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/25879.html
標籤:WPF
