win 8 ProgressRing加多线程

来源:互联网 发布:linux用户命令 编辑:程序博客网 时间:2024/06/02 16:10

当我们点击一个按钮执行放大 时,因为放大的数据可能很大,需要一定的等待时间,这个时候为了更好的体验,我们需要加一个ProgressRing,界面布局如下

 <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">        <Popup Name="popup" Visibility="Visible" IsOpen="False">            <Grid Width="{Binding ElementName=pageRoot,Path=ActualWidth}" Height="{Binding ElementName=pageRoot,Path=ActualHeight}" Background="#89000000">                <ProgressRing Visibility="Visible" Width="400" Height="400" Name="ring" IsActive="False" FontFamily="Global User Interface"></ProgressRing>            </Grid>        </Popup>                <ScrollViewer ZoomMode="Enabled" ZoomSnapPointsType="None" MaxWidth="2000">            <Grid Name="grid" Background="White">                <Grid.RowDefinitions>                    <RowDefinition></RowDefinition>                    <RowDefinition></RowDefinition>                    <RowDefinition></RowDefinition>                    <RowDefinition></RowDefinition>                    <RowDefinition></RowDefinition>                    <RowDefinition></RowDefinition>                    <RowDefinition></RowDefinition>                    <RowDefinition></RowDefinition>                    <RowDefinition></RowDefinition>                    <RowDefinition></RowDefinition>                </Grid.RowDefinitions>                <Grid.ColumnDefinitions>                    <ColumnDefinition></ColumnDefinition>                    <ColumnDefinition></ColumnDefinition>                    <ColumnDefinition></ColumnDefinition>                    <ColumnDefinition></ColumnDefinition>                    <ColumnDefinition></ColumnDefinition>                    <ColumnDefinition></ColumnDefinition>                    <ColumnDefinition></ColumnDefinition>                    <ColumnDefinition></ColumnDefinition>                    <ColumnDefinition></ColumnDefinition>                    <ColumnDefinition></ColumnDefinition>                    <ColumnDefinition></ColumnDefinition>                    <ColumnDefinition></ColumnDefinition>                    <ColumnDefinition></ColumnDefinition>                    <ColumnDefinition></ColumnDefinition>                </Grid.ColumnDefinitions>            </Grid>        </ScrollViewer>           </Grid>    <Page.BottomAppBar>        <AppBar>            <StackPanel>                <Button x:Name="largeButton" Style="{StaticResource ZoomInAppBarButtonStyle}" AutomationProperties.Name="放大" Click="largeButton_Click" />            </StackPanel>        </AppBar>    </Page.BottomAppBar>

后台初始化界面

 private void initButton()        {            for (int i = 0; i < 10; i++)            {                for (int j = 0; j < 14; j++)                {                    Button btn = new Button();                    btn.Width = 60;                    btn.Height = 60;                    btn.BorderThickness = new Thickness(2);                    btn.BorderBrush = new SolidColorBrush(Colors.Black);                    btn.Foreground = new SolidColorBrush(Colors.Black);                    btn.Content = i.ToString() + "," + j.ToString();                    Grid.SetRow(btn, i);                    Grid.SetColumn(btn, j);                    this.grid.Children.Add(btn);                }            }        }

就是简单的在前台加入一些按钮,执行对这些按钮的放大。

private void largeButton_Click(object sender, RoutedEventArgs e)        {            //showLoading();            var task = Task.Factory.StartNew(() => showLoading());            //Task task = new Task(() => longTime());                        //task.Start();            longTime();//如果没有多任务,直接执行这个函数,是不行的,前台线程会阻塞            task.Wait();            closeLoading();        }        /// <summary>        /// 显示加载        /// </summary>        private void showLoading()        {            this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>                {                    this.popup.IsOpen = true;                    this.ring.IsActive = true;                });        }        /// <summary>        /// 关闭加载        /// </summary>        private void closeLoading()        {            this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>                {                    this.popup.IsOpen = false;                    this.ring.IsActive = false;                });        }        /// <summary>        /// 耗时间的操作        /// </summary>        private void longTime()        {            this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>                {                    for (int i = 0; i < 100; i++)                    {                        foreach (Button btn in this.grid.Children)//耗时间的操作                        {                            btn.Width += 10;                            btn.Height += 6;                        }                    }                });        }


0 0
原创粉丝点击