Windows Phone 7 自定义事件

简介:

在Windows Phone的应用开发里面,对于事件这种东西我们可以随处可见,系统本来就已经封装好了各种各样的事件机制,如按钮的单击事件等等的。在实际的开发中,我们需要自己去给相关的类自定义一些事件来满足业务的要求,特别在使用观察着模式的时候,在wp7中利用事件去实现是理所当然的。

自定义事件步骤有下面的几个步骤:

1、继承EventArgs类实现自己自定义的事件参数;

2、定义一个委托;

3、定义一个事件

4、添加事件。

下面来看一下一个Demo对自定义事件的实现,这个Demo只是对网络请求的状态进行一个简单的事件监控的调用处理:

自定义的事件参数类

StateChangedEventArgs.cs

 


 
 
  1. using System;  
  2.  
  3. namespace EventDemo  
  4. {  
  5.     /// <summary> 
  6.     /// 状态事件  
  7.     /// </summary> 
  8.     public class StateChangedEventArgs : EventArgs  
  9.     {  
  10.         public readonly string NewState;  
  11.         public readonly DateTime Timestamp;  
  12.  
  13.         public StateChangedEventArgs(string newstate)  
  14.         {  
  15.             this.NewState = newstate;  
  16.             this.Timestamp = DateTime.Now;  
  17.         }  
  18.     }  

在业务类里面定义事件:

NetTask.cs

 


 
 
  1. using System;  
  2. using System.Net;  
  3. using System.Threading;  
  4. using System.IO;  
  5.  
  6. namespace EventDemo  
  7. {  
  8.     public class NetTask  
  9.     {  
  10.         //定义委托  
  11.         public delegate void StateChanged(NetTask sender, StateChangedEventArgs args);  
  12.         //定义事件  
  13.         public event StateChanged OnStateChanged;  
  14.         //出事状态  
  15.         public string NetTaskName = "";  
  16.  
  17.         /// <summary> 
  18.         /// 网络任务  
  19.         /// </summary> 
  20.         /// <param name="url"></param> 
  21.         public void StartNetTask(string url)  
  22.         {  
  23.             bool success = false;  
  24.             int attempt = 0;  
  25.             while (attempt < 3)  
  26.             {  
  27.                 AsyncCallback callback = null;  
  28.                 //开启线程等待  
  29.                 ManualResetEvent webRequestWait = new ManualResetEvent(false);  
  30.                 Uri targetUri = new Uri(url);  
  31.                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetUri);  
  32.                 request.Method = "POST";  
  33.                 if (callback == null)  
  34.                 {  
  35.                     callback = delegate(IAsyncResult asRequest)  
  36.                     {  
  37.                         try  
  38.                         {  
  39.                             success = true;  
  40.                             webRequestWait.Set();  
  41.                             //……  
  42.                         }  
  43.                         catch  
  44.                         {  
  45.                             OnStateChanged(this, new StateChangedEventArgs("重试"));  
  46.                             webRequestWait.Set();  
  47.                         }  
  48.                     };  
  49.                 }  
  50.                 request.BeginGetRequestStream(callback, request);  
  51.  
  52.                 //等待线程结束  
  53.                 webRequestWait.WaitOne();  
  54.                 if (success)  
  55.                 {  
  56.                     break;  
  57.                 }  
  58.                 attempt++;  
  59.                 Thread.Sleep(1000);  
  60.             }  
  61.             if (success)  
  62.             {  
  63.                 OnStateChanged(this, new StateChangedEventArgs("成功"));  
  64.                 Thread.Sleep(50);  
  65.             }  
  66.             else  
  67.             {  
  68.                 OnStateChanged(this, new StateChangedEventArgs("失败"));  
  69.             }  
  70.         }  
  71.     }  

简单的测试一下

 


 
 
  1. <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
  2.             <Button Content="测试网络" Height="72" HorizontalAlignment="Left" Margin="143,105,0,0" Name="button1" VerticalAlignment="Top" Width="202" Click="button1_Click" /> 
  3.             <TextBlock Height="50" HorizontalAlignment="Left" Margin="96,270,0,0" Name="textBlock1" Text="网络的状态:" VerticalAlignment="Top" Width="126" /> 
  4.             <TextBlock Height="48" HorizontalAlignment="Left" Margin="34,326,0,0" Name="textBlock2" Text="" VerticalAlignment="Top" Width="377" /> 
  5.         </Grid> 

MainPage.xaml.cs

 


 
 
  1. using System.Windows;  
  2. using Microsoft.Phone.Controls;  
  3.  
  4. namespace EventDemo  
  5. {  
  6.     public partial class MainPage : PhoneApplicationPage  
  7.     {  
  8.         public MainPage()  
  9.         {  
  10.             InitializeComponent();  
  11.         }  
  12.  
  13.         private void button1_Click(object sender, RoutedEventArgs e)  
  14.         {  
  15.             NetTask netTask = new NetTask();  
  16.             netTask.OnStateChanged += OnStateChanged;  
  17.             netTask.NetTaskName = "测试网络";  
  18.             netTask.StartNetTask("http://www.cnblogs.com");  
  19.         }  
  20.  
  21.         public void OnStateChanged(object sender, StateChangedEventArgs e)  
  22.         {  
  23.             NetTask temp = sender as NetTask;  
  24.             textBlock2.Text = temp.NetTaskName + "," + e.NewState+","+e.Timestamp.ToLongTimeString();  
  25.         }  
  26.     }  

运行的效果如下:

 

 

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


相关文章
|
Android开发 iOS开发 Windows
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
不久前,随着最后一家WP手机厂商惠普宣布取消今后Windows Phone的研发计划,以及微软官方声明对WP8.1系统今后所有升级维护的终止,WP手机,作为曾经和安卓手机、苹果手机并驾齐驱的三大智能手机之一,正式寿终正寝。
1924 0
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
|
XML 开发框架 前端开发
Windows Phone快速入门需掌握哪些能力
在此之前,先普及下Windows Phone的概念和开发工具的介绍。 Windows Phone是微软公司开发的手机操作系统,它将微软旗下的Xbox Live游戏、Xbox Music音乐与独特的视频体验集成至手机中。2012年6月21日,微软正式发布Windows Phone 8,采用和Windows 8相同的Windows NT内核,同时也针对市场的Windows Phone 7.5发布Windows Phone 7.8。
352 0
Windows Phone快速入门需掌握哪些能力
|
移动开发 Android开发 开发者
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
在Build 2014大会上,微软正式发布了传闻已久的Windows Phone 8.1系统,所有的Windows Phone 8手机都可以升级,微软这次可谓是十分厚道。虽然并非迭代升级,但WP 8.1还是拥有很多重大更新,对于微软进一步完善移动平台拥有积极的意义。下面,就一起来了解一下WP 8.1的主要新特性。
402 0
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
|
编解码 前端开发 JavaScript
Windows Phone 下开发 LBS 应用
基于位置的服务(Location Based Service,LBS),它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标),在GIS(Geographic Information System,地理信息系统)平台的支持下,为用户提供相应服务的一种增值业务。
418 0
|
Windows 数据安全/隐私保护 C#