WPF利用多线程的后台线程

来源:互联网 发布:mac 使命召唤 编辑:程序博客网 时间:2024/05/18 13:06

最近学了一下WPF的后台线程,在这里简单的把代码贴出来,具体的使用已经在程序里面注释了。

using System;using System.Collections.Generic;using System.Linq;using System.Text;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;//多线程需要添加的命名空间using System.ComponentModel;using System.Threading;namespace 多线程测试{    /// <summary>    /// MainWindow.xaml 的交互逻辑    /// </summary>    public partial class MainWindow : Window    {        private BackgroundWorker bgWorker = new BackgroundWorker();        private int i = 0;        public MainWindow()        {            InitializeComponent();            //支持报告进度更新            bgWorker.WorkerReportsProgress = true;            //支持异步取消            bgWorker.WorkerSupportsCancellation = true;            //将DoWork_Handler绑定在RunWorkerAsync()            bgWorker.DoWork += DoWork_Handler;            //将ProgressChanged_Handler绑定在ReportProgress()            bgWorker.ProgressChanged += ProgressChanged_Handler;             //退出时发生            bgWorker.RunWorkerCompleted += RunWorkerCompleted_Handler;        }        /// <summary>        /// 开始按钮        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btnProcess_Click(object sender, RoutedEventArgs e)        {            if (!bgWorker.IsBusy)            {                bgWorker.RunWorkerAsync();            }        }        /// <summary>        /// 取消按钮        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void btnCancel_Click(object sender, RoutedEventArgs e)        {            bgWorker.CancelAsync();        }        /// <summary>        /// 进度更新        /// </summary>        /// <param name="sender"></param>        /// <param name="args"></param>        private void ProgressChanged_Handler(object sender, ProgressChangedEventArgs args)        {            lbDisplay.Items.Add("第" + i + "次测试");        }        /// <summary>        /// 后台线程        /// </summary>        /// <param name="sender"></param>        /// <param name="args"></param>        private void DoWork_Handler(object sender, DoWorkEventArgs args)        {            BackgroundWorker worker = sender as BackgroundWorker;            while (true)            {                if (worker.CancellationPending)                {                    args.Cancel = true;                    break;                }                else                {                    i++;                    bgWorker.ReportProgress(0);                    Thread.Sleep(500);                }            }        }        /// <summary>        /// 执行完成或正常退出后的事件        /// </summary>        /// <param name="sender"></param>        /// <param name="args"></param>        private void RunWorkerCompleted_Handler(object sender, RunWorkerCompletedEventArgs args)        {            if (args.Cancelled)            {                MessageBox.Show("后台任务已经被取消。", "消息");            }            else            {                MessageBox.Show("后台任务正常结束。", "消息");            }        }    }}
0 0
原创粉丝点击