zoukankan      html  css  js  c++  java
  • WP7开发中自定义事件的处理

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

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

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

    2、定义一个委托;

    3、定义一个事件;

    4、添加事件。

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

    自定义的事件参数类

    StateChangedEventArgs.cs

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

    在业务类里面定义事件

    NetTask.cs

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

    简单的测试一下:

    1. <Gridx:Name="ContentPanel"Grid.Row="1"Margin="12,0,12,0">
    2. <ButtonContent="测试网络"Height="72"HorizontalAlignment="Left"Margin="143,105,0,0"Name="button1"VerticalAlignment="Top"Width="202"Click="button1_Click"/>
    3. <TextBlockHeight="50"HorizontalAlignment="Left"Margin="96,270,0,0"Name="textBlock1"Text="网络的状态:"VerticalAlignment="Top"Width="126"/>
    4. <TextBlockHeight="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. namespace EventDemo
    4. {
    5. public partial class MainPage : PhoneApplicationPage
    6. {
    7. public MainPage()
    8. {
    9. InitializeComponent();
    10. }
    11. privatevoid button1_Click(object sender, RoutedEventArgs e)
    12. {
    13. NetTask netTask = new NetTask();
    14. netTask.OnStateChanged += OnStateChanged;
    15. netTask.NetTaskName = "测试网络";
    16. netTask.StartNetTask("http://www.cnblogs.com");
    17. }
    18. publicvoid OnStateChanged(object sender, StateChangedEventArgs e)
    19. {
    20. NetTask temp = sender as NetTask;
    21. textBlock2.Text = temp.NetTaskName + "," + e.NewState+","+e.Timestamp.ToLongTimeString();
    22. }
    23. }
    24. }

    运行的效果如下:

  • 相关阅读:
    Oracle 获取创建控制文件的脚本
    ESXi下误删磁盘分区
    Oracle 3DES加密示例
    Oracle job 执行多个存储过程
    解开紧箍咒
    国际关系之美国南海战略意图(转)
    GHOST系统锁定主页常用软件及解决方案
    cut命令详解
    grep命令详解
    awk命令详解
  • 原文地址:https://www.cnblogs.com/xzty/p/2520332.html
Copyright © 2011-2022 走看看