首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Windows Mobile >

进度条的开启和关闭有关问题

2013-03-16 
进度条的开启和关闭问题想要的结果是:删除列表中的第n条记录时,显示进度条,删除完毕并作相应处理后关闭进

进度条的开启和关闭问题
想要的结果是:删除列表中的第n条记录时,显示进度条,删除完毕并作相应处理后关闭进度条。但我如下做法却实现不了。具体是:用ApplicationBar中的按钮(如btnBegin、btnEnd)可实现进度条的开启和关闭,但在ListBox中的按钮(如deleteTaskButton_Click)却不能实现进度条的开启和关闭。个人感觉是ListBox中的按钮调用不了其外面的控件progressBar,我也不知道如何调用。请高手指点。

/*页面部分代码*/
   <!--LayoutRoot 是包含所有页面内容的根网格-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        
        <!--TitlePanel 包含应用程序的名称和页标题-->
        <StackPanel Grid.Row="0" Margin="12,0,12,0">
            <helpers:ProgressBarWithText Name="progressBar"
                Text="正在处理..." 
                ShowProgress="{Binding ElementName=currPage, Path=ShowProgress}" 
                />
        </StackPanel>

                <ListBox x:Name="listPrincipleView" Margin="0,2,0,0" ItemsSource="{Binding}"  ItemTemplate="{StaticResource PrincipleContentTemplate}" />

     </Grid>

    <phone:PhoneApplicationPage.ApplicationBar>
        <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">
            <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button1" Click="btnBegin"/>
            <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button2" Click="btnEnd"/>
        </shell:ApplicationBar>
    </phone:PhoneApplicationPage.ApplicationBar>


/*后台可实现进度条开启和关闭的部分代码*/

        private void btnBegin(object sender, EventArgs e)
        {
            progressBar.ShowProgress = true;
        }


        private void btnEnd(object sender, EventArgs e)
        {
            progressBar.ShowProgress = false;
        }


/*后台不能实现进度条开启和关闭的部分代码,下面的按钮在temTemplate="{StaticResource PrincipleContentTemplate}" 中已定义*/


        private void deleteTaskButton_Click(object sender, RoutedEventArgs e)
        {

            var button = sender as Button;



            if (button != null)
            {

                if (MessageBox.Show("      真的要删除吗?", "提示", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
                {
                    progressBar.ShowProgress = true;  //进度条开始

                    
                    for (int i = 0; i < 100000; i++)
                    {
                        for (int j = 0; j < 100000; j++)
                        {
                        }
                    }

                    progressBar.ShowProgress = false; //进度条结束

                }
            }
        }


[解决办法]
progressBar.ShowProgress = true;  //进度条开始
                     for (int i = 0; i < 100000; i++)
                     {
                         for (int j = 0; j < 100000; j++)
                         {
                         }
                     }
                     progressBar.ShowProgress = false; //进度条结束

这是同步的操作,等到progressBar.ShowProgress = false执行后才会去更新页面,当然会不显示了

[解决办法]
            this.Dispatcher.BeginInvoke(() => { progressBar.ShowProgress = true;});


            System.Threading.ThreadPool.QueueUserWorkItem((o) =>
            {
                System.Threading.Thread.Sleep(5000);
//或者你的for循环
                this.Dispatcher.BeginInvoke(() => { progressBar.ShowProgress = false; });
            });

热点排行