WP8控件进度条(ProgressBar)的使用

--前台代码 

<Grid x:Name="ContentPanel"  Grid.Row="1" Margin="0,0,24,0">
            <ProgressBar x:Name="ProgressBar1" HorizontalAlignment="Left" Height="71" Margin="42,244,0,0" VerticalAlignment="Top" Width="308" Value="50"/>
            <TextBlock HorizontalAlignment="Left" Height="38" Margin="42,10,0,0" TextWrapping="Wrap" Text="请选择类型" VerticalAlignment="Top" Width="330"/>
            <RadioButton x:Name="rad1" Content="Determinate类型" HorizontalAlignment="Left" Margin="42,53,0,0" VerticalAlignment="Top" Width="330" IsChecked="True"/>
            <RadioButton x:Name="rad2" Content="Indeterminate类型" HorizontalAlignment="Left" Margin="42,146,0,0" VerticalAlignment="Top" Width="330"/>
            <Button x:Name="begin" Content="启动" HorizontalAlignment="Left" Margin="42,320,0,0" VerticalAlignment="Top" Width="295"/>
            <Button x:Name="canel" Content="取消" HorizontalAlignment="Left" Margin="42,392,0,0" VerticalAlignment="Top" Width="295"/>
        </Grid>

--后台代码

using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using PhoneFirst.Resources;
using System.ComponentModel;

namespace PhoneFirst
{
    public partial class MainPage : PhoneApplicationPage
    {
        private BackgroundWorker backgroundworker;
        // 构造函数
        public MainPage()
        {
            
            InitializeComponent();
            ProgressBar1.Visibility = Visibility.Collapsed;
            begin.Click += begin_Click;
            canel.Click += canel_Click;

          
        }

        void canel_Click(object sender, RoutedEventArgs e)
        {
            ProgressBar1.Visibility = Visibility.Collapsed;
        }

        void begin_Click(object sender, RoutedEventArgs e)
        {
            ProgressBar1.Visibility = Visibility.Visible;
            if (rad1.IsChecked == true)
            {
                ProgressBar1.IsIndeterminate = false;
                backgroundworker = new BackgroundWorker();//创建一个后台处理类的对象
                //调用RunWorkerAsync后台操作时引发此事件,即后台要处理的事情写在这个事件里面
                backgroundworker.DoWork += backgroundworker_DoWork;
                //当后台操作完成事件
                backgroundworker.RunWorkerCompleted += backgroundworker_RunWorkerCompleted;
                //当处理进度(ReportProgress)被激活后,进度的改变将触发ProgressChanged事件
                backgroundworker.ProgressChanged += backgroundworker_ProgressChanged;
                //设置为可报告进度情况的后台处理
                backgroundworker.WorkerReportsProgress = true;
                backgroundworker.RunWorkerAsync();
            }
            else
            {
                ProgressBar1.Value = 0;
                ProgressBar1.IsIndeterminate = true;
            }
        }
        //进度改变处理
        void backgroundworker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            Dispatcher.BeginInvoke(() => {
                //把进度改变的值赋给ProgressBar1进度条的值
                ProgressBar1.Value = e.ProgressPercentage;
            });
        }
        //后台操作完成
        void backgroundworker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            Dispatcher.BeginInvoke(() => { 
            //隐藏进度条;
                ProgressBar1.Visibility = Visibility.Collapsed;
            });
        }
        //后台操作处理
        void backgroundworker_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 0; i < 100; i++)
            {
                i += 10;
                //赋值当前进度的值,
                backgroundworker.ReportProgress(i);
                //为了能看到进度条的效果。这里用进程暂停了1秒
                System.Threading.Thread.Sleep(1000);
            }
        }

        
        public ResourceDictionary Resources { get; set; }

       
        
    }
    
}

 

posted on 2013-09-17 14:35  MyBeN  阅读(1330)  评论(0编辑  收藏  举报

导航