Windows Phone 7 程序等待页面的处理

简介:

 程序启动通常会有一个等待的过程,在这个过程中可以通过使用Popup控件配合BackgroundWorker类启动后台线程来实现。

 

 

控件的代码

PopupSplash.xaml

 


 
 
  1. <UserControl x:Class="ProgressSplashScreen.PopupSplash" 
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  4.     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
  5.     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
  6.     mc:Ignorable="d" 
  7.     FontFamily="{StaticResource PhoneFontFamilyNormal}" 
  8.     FontSize="{StaticResource PhoneFontSizeNormal}" 
  9.     Foreground="{StaticResource PhoneForegroundBrush}" 
  10.     d:DesignHeight="800" d:DesignWidth="480"> 
  11.       
  12.     <Grid x:Name="LayoutRoot" Background="White" Width="480" Height="800"> 
  13.         <ProgressBar HorizontalAlignment="Left" Margin="0,755,0,0" Name="progressBar1" Width="480" Background="DarkRed"   /> 
  14.         <Image Height="757" HorizontalAlignment="Left" Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="480" Source="/ProgressSplashScreen;component/wuyuan.png" /> 
  15.         <TextBlock HorizontalAlignment="Left" Margin="171,656,0,97" Name="textBlock1" Text="Loading..." Width="208" Foreground="Black" FontSize="30" /> 
  16.     </Grid> 
  17. </UserControl> 

cs

 


 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Net;  
  5. using System.Windows;  
  6. using System.Windows.Controls;  
  7. using System.Windows.Documents;  
  8. using System.Windows.Input;  
  9. using System.Windows.Media;  
  10. using System.Windows.Media.Animation;  
  11. using System.Windows.Shapes;  
  12.  
  13. namespace ProgressSplashScreen  
  14. {  
  15.     public partial class PopupSplash : UserControl  
  16.     {  
  17.         public PopupSplash()  
  18.         {  
  19.             InitializeComponent();  
  20.             this.progressBar1.IsIndeterminate = true;//指示进度条是使用重复模式报告一般进度  
  21.         }  
  22.     }  

MainPage.xaml.cs

 


 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Net;  
  5. using System.Windows;  
  6. using System.Windows.Controls;  
  7. using System.Windows.Documents;  
  8. using System.Windows.Input;  
  9. using System.Windows.Media;  
  10. using System.Windows.Media.Animation;  
  11. using System.Windows.Shapes;  
  12. using Microsoft.Phone.Controls;  
  13. using System.Windows.Controls.Primitives;  
  14. using System.ComponentModel;  
  15. using System.Threading;  
  16.  
  17. namespace ProgressSplashScreen  
  18. {  
  19.     public partial class MainPage : PhoneApplicationPage  
  20.     {  
  21.         private Popup popup;  
  22.         private BackgroundWorker backroungWorker;  
  23.         public MainPage()  
  24.         {  
  25.             InitializeComponent();  
  26.             ShowPopup();  
  27.         }  
  28.         private void ShowPopup()  
  29.         {  
  30.             this.popup = new Popup();  
  31.             this.popup.Child = new PopupSplash();//设置 Popup 控件的内容,把自定义的PopupSplash控件填充到popup控件上  
  32.             this.popup.IsOpen = true;  
  33.             StartLoadingData();//开始加载数据  
  34.         }  
  35.  
  36.         private void StartLoadingData()  
  37.         {  
  38.             //使用BackgroundWorker在单独的线程上执行操作  
  39.             backroungWorker = new BackgroundWorker();  
  40.             //调用 RunWorkerAsync后台操作时引发此事件,即后台要处理的事情写在这个事件里面  
  41.             backroungWorker.DoWork += new DoWorkEventHandler(backroungWorker_DoWork);  
  42.             //当后台操作完成事件  
  43.             backroungWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backroungWorker_RunWorkerCompleted);  
  44.             //开始执行后台操作  
  45.             backroungWorker.RunWorkerAsync();  
  46.         }  
  47.         //后台操作完成  
  48.         void backroungWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)  
  49.         {  
  50.             this.Dispatcher.BeginInvoke(() => 
  51.                 {  
  52.                     this.popup.IsOpen = false;//关闭popup  注意要使用Dispatcher.BeginInvoke开跟UI通讯  
  53.                 }  
  54.             );  
  55.         }  
  56.         //后台操作处理  
  57.         void backroungWorker_DoWork(object sender, DoWorkEventArgs e)  
  58.         {  
  59.             // 程序初始化处理   这里只是模拟了一下  
  60.             Thread.Sleep(7000);  
  61.         }  
  62.     }  

System.Windows.Controls.Primitives.Popup 类

xaml语法

<Popup>
Child
</Popup>

Popup 控件可在单独窗口中相对于屏幕上的元素或点显示内容。当 Popup 可见时,IsOpen 属性设置为 true。 
Popup.Child 属性

内容模型:Child 属性是 Popup 控件的唯一内容属性。一个 Popup 只能有一个 UIElement 作为子级,但该子级可以包含复杂的嵌入内容。例如,该子级可以是包含 Image、文本和其他类型控件的 StackPanel。 当将内容添加到 Popup 控件时,Popup 控件会成为该内容的逻辑父级。同样,Popup 内容将被视为 Popup 的逻辑子级。不会将子内容添加到包含 Popup 控件的可视化树中。但当 IsOpen 设置为 true 时,子内容将呈现在具有自身可视化树的单独的窗口中。

System.ComponentModel. BackgroundWorker 类

BackgroundWorker 类允许您在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。

若要在后台执行耗时的操作,请创建一个 BackgroundWorker,侦听那些报告操作进度并在操作完成时发出信号的事件。若要设置后台操作,请为 DoWork 事件添加一个事件处理程序。在此事件处理程序中调用耗时的操作。若要启动该操作,请调用 RunWorkerAsync。若要收到进度更新通知,请对 ProgressChanged 事件进行处理。若要在操作完成时收到通知,请对 RunWorkerCompleted 事件进行处理。

注意 
您必须非常小心,确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。

BackgroundWorker 事件不跨 AppDomain 边界进行封送处理。请不要使用 BackgroundWorker 组件在多个 AppDomain 中执行多线程操作。
如果后台操作需要参数,请在调用 RunWorkerAsync 时给出参数。在 DoWork 事件处理程序内部,可以从 DoWorkEventArgs.Argument 属性中提取该参数。



本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1078688

相关文章
|
消息中间件 编译器 API
Windows窗口程序
Windows窗口程序
|
2月前
|
Windows
Windows下版本控制器(SVN)-验证是否安装成功+配置版本库+启动服务器端程序
Windows下版本控制器(SVN)-验证是否安装成功+配置版本库+启动服务器端程序
110 2
|
3月前
|
Windows
Windows下版本控制器(SVN)-启动服务器端程序
Windows下版本控制器(SVN)-启动服务器端程序
112 4
|
4月前
|
安全 Devops 测试技术
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
84 0
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
|
7月前
|
安全 JavaScript Java
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
93 12
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
|
6月前
|
Windows
Windows程序的数字签名证书怎么申请
Windows程序的数字签名证书申请流程包括:准备企业资料(营业执照、税务登记证等),提交申请表及企业资料。经过初审、实名认证和二审后,等待1-5个工作日审核结果。审核通过后,CA机构颁发证书并通过邮件或邮寄方式发送。收到证书后按指南安装并使用签名工具对程序进行数字签名,确保软件完整性和可信度。注意证书有效期、管理和兼容性问题。
|
6月前
|
自然语言处理 安全 测试技术
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
326 0
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
|
12月前
|
Windows Python
python获取windows机子上运行的程序名称
python获取windows机子上运行的程序名称
|
12月前
|
小程序 Windows
MASM32编写的程序在Windows 7,10下运行正常,但在Win XP下运行时只闻其声不见其形的故障
MASM32编写的程序在Windows 7,10下运行正常,但在Win XP下运行时只闻其声不见其形的故障
|
11月前
|
安全 API C#
C# 如何让程序后台进程不被Windows任务管理器强制结束
C# 如何让程序后台进程不被Windows任务管理器强制结束
358 0