zoukankan      html  css  js  c++  java
  • C# BackgroundWorker的使用

    <Window x:Class="BackgroundWorkerExam.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="237" Width="229">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="100"></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <TextBlock Text="X" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="3"></TextBlock>
            <TextBox Margin="3" Grid.Column="1" Name="txtX" VerticalContentAlignment="Center" ></TextBox>
            <TextBlock Text="Y" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="3" Grid.Row="1"></TextBlock>
            <TextBox Margin="3" Grid.Row="1" Grid.Column="1" Name="txtY" VerticalContentAlignment="Center"></TextBox>
            <TextBlock Text="Result" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="3" Grid.Row="2"></TextBlock>
            <TextBox Margin="3" Grid.Row="2" Grid.Column="1" Name="txtResult" VerticalContentAlignment="Center"></TextBox>
            <Button Margin="3" Grid.Row="3" Content="Caculate" Name="btnCaculate" Click="btnCaculate_Click_1"></Button>
            <Button Margin="3" Grid.Row="3" Grid.Column="1" Content="Cancel" Name="btnCancel" Click="btnCancel_Click_1"></Button>
            <ProgressBar Margin="3" Grid.Row="4" Grid.ColumnSpan="2" Name="progBar"></ProgressBar>
        </Grid>

    </Window>



    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;


    namespace BackgroundWorkerExam
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
                worker = new BackgroundWorker();
                worker.WorkerSupportsCancellation = true; //支持取消
                worker.WorkerReportsProgress = true;//支持报告进度
                worker.DoWork += worker_DoWork;
                worker.RunWorkerCompleted += worker_RunWorkerCompleted;
                worker.ProgressChanged += worker_ProgressChanged;

            }


            void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                this.progBar.Value = e.ProgressPercentage;
            }


            void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                if (e.Cancelled) //如果取消了,就不可以访问e.result
                {
                    this.txtResult.Text = "Cancelled";
                }
                else
                {
                    this.txtResult.Text = e.Result.ToString();
                }

                this.btnCaculate.IsEnabled = true;
                this.btnCancel.IsEnabled = false;
                this.progBar.Value = 100;
            }


            void worker_DoWork(object sender, DoWorkEventArgs e)
            {
                var t = e.Argument as Tuple<int, int>;
                //Thread.Sleep(5000);
                for (int i = 0; i < 10; i++)
                {
                    Thread.Sleep(500);
                    worker.ReportProgress(i * 10);
                    if (worker.CancellationPending)
                    {
                        e.Cancel = true;
                        return;
                    }

                }
                e.Result = t.Item1 + t.Item2;
            }


            private BackgroundWorker worker;


            private void btnCaculate_Click_1(object sender, RoutedEventArgs e)
            {
                this.btnCaculate.IsEnabled = false;
                this.txtResult.Text = string.Empty;
                this.btnCancel.IsEnabled = true;
                this.progBar.Value = 0;
                worker.RunWorkerAsync(Tuple.Create(int.Parse(txtX.Text), int.Parse(txtY.Text)));
            }


            private void btnCancel_Click_1(object sender, RoutedEventArgs e)
            {
                worker.CancelAsync();
            }
        }
    }

  • 相关阅读:
    ACM-ICPC 2018 徐州赛区网络预赛 F Features Track(STL模拟)
    ACM-ICPC 2018 徐州赛区网络预赛 H Ryuji doesn't want to study (树状数组差分)
    数位dp
    Number String
    The King’s Ups and Downs
    容斥定理
    Anagram(山东省2018年ACM浪潮杯省赛)
    STL——queue
    lower_bound和upper_bound使用说明
    int string相互转换
  • 原文地址:https://www.cnblogs.com/dxmfans/p/9434784.html
Copyright © 2011-2022 走看看