博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows Phone 7 自定义事件
阅读量:5889 次
发布时间:2019-06-19

本文共 3307 字,大约阅读时间需要 11 分钟。

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

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

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

2、定义一个委托;

3、定义一个事件

4、添加事件。

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

自定义的事件参数类

StateChangedEventArgs.cs

using System; namespace EventDemo {
/// /// 状态事件 /// public class StateChangedEventArgs : EventArgs {
public readonly string NewState; public readonly DateTime Timestamp; public StateChangedEventArgs(string newstate) {
this.NewState = newstate; this.Timestamp = DateTime.Now; } } }

在业务类里面定义事件:

NetTask.cs

using System; using System.Net; using System.Threading; using System.IO; namespace EventDemo {
public class NetTask {
//定义委托 public delegate void StateChanged(NetTask sender, StateChangedEventArgs args); //定义事件 public event StateChanged OnStateChanged; //出事状态 public string NetTaskName = ""; /// /// 网络任务 /// /// public void StartNetTask(string url) {
bool success = false; int attempt = 0; while (attempt < 3) {
AsyncCallback callback = null; //开启线程等待 ManualResetEvent webRequestWait = new ManualResetEvent(false); Uri targetUri = new Uri(url); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetUri); request.Method = "POST"; if (callback == null) {
callback = delegate(IAsyncResult asRequest) {
try {
success = true; webRequestWait.Set(); //…… } catch {
OnStateChanged(this, new StateChangedEventArgs("重试")); webRequestWait.Set(); } }; } request.BeginGetRequestStream(callback, request); //等待线程结束 webRequestWait.WaitOne(); if (success) {
break; } attempt++; Thread.Sleep(1000); } if (success) {
OnStateChanged(this, new StateChangedEventArgs("成功")); Thread.Sleep(50); } else {
OnStateChanged(this, new StateChangedEventArgs("失败")); } } } }

简单的测试一下

MainPage.xaml.cs

using System.Windows; using Microsoft.Phone.Controls; namespace EventDemo {
public partial class MainPage : PhoneApplicationPage {
public MainPage() {
InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) {
NetTask netTask = new NetTask(); netTask.OnStateChanged += OnStateChanged; netTask.NetTaskName = "测试网络"; netTask.StartNetTask("http://www.cnblogs.com"); } public void OnStateChanged(object sender, StateChangedEventArgs e) {
NetTask temp = sender as NetTask; textBlock2.Text = temp.NetTaskName + "," + e.NewState+","+e.Timestamp.ToLongTimeString(); } } }

 运行的效果如下:

 

 

你可能感兴趣的文章
java jni 原理_使用JNI技术实现Java和C++的交互
查看>>
java 重写system.out_重写System.out.println(String x)方法
查看>>
Ubuntu 12.04安装
查看>>
mysql client命令行选项
查看>>
vc遍历网页表单并自动填写提交 .
查看>>
log4j
查看>>
自定义TabControl
查看>>
配置ORACLE 11g绿色版客户端和PLSQL远程连接环境
查看>>
wordpress wp_head()函数 浏览器顶部 空白28px 解决办法
查看>>
读书笔记:改变人心的技巧
查看>>
MATLAB实现频数表——hist的使用
查看>>
iphone 线程 NSCondition NSThread
查看>>
NSURLConnection下载文件并显示进度(HEAD)
查看>>
在Firefox中使用超级Bookmarklet
查看>>
Content type and column用法示例代码来自SharePoint会议
查看>>
设计模式:外观模式(Façade Pattern)
查看>>
ASP.NET中 DataList(数据列表)的使用前台绑定
查看>>
Linux学习之CentOS(八)--Linux系统的分区概念
查看>>
C语言字节对齐
查看>>
主域控制器的安装与配置步骤与方法
查看>>