在Silverlight中,当用户退出程序时,我们一般需要在Exit事件中保存用户的相关资料,本文主要讲述在OOB模式下的解决方案.

按照一般的思路,在程序退出时,我们会在Exit事件中与服务器交互,如下代码:

  private void Application_Exit(object sender, EventArgs e)
  {
    TestClient proxy=new TestClient();
    proxy.SaveWorkCompleted += (obj,arg) => { };
    proxy.SaveWorkAsync();
  }

但是,调试下来你会发现,根本没有执行proxy.SaveWorkCompleted,经过查找资料确认在Exit()中是不支持WCF的.见MSDN:

经过一番搜索,在OOB模式下,我们可以用Closing方式进行处理:

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
        if(App.Current.IsRunningOutOfBrowser)
        {
            App.Current.MainWindow.Closing += MainWindowClosing;
        }
    }
 
    private bool _isLoginOut=false;
     void MainWindowClosing(object sender, System.ComponentModel.ClosingEventArgs e)
    {
        if(!_isLoginOut)
        {
            e.Cancel = true;
            TestClient proxy = new TestClient();
            proxy.SaveWorkCompleted += (obj, arg) =>
                                           {
                                               _isLoginOut = true;
                                               App.Current.MainWindow.Close();
                                           };
            proxy.SaveWorkAsync();
        }
    }
}

当用户点击OOB窗口的关闭按钮时,会首先触发Closing事件,执行时首先会取消当前的Exit事件,即e.Cancel=true,当WCF执行完后,调用App.Current.MainWindow.Close()关闭程序

不过用这种方式,你需要提升OOB的权限,否则在执行App.Current.MainWindow.Close()时会报出安全异常

提升OOB权限,意味着需要对xap进行签名,用户安装时将看到这个界面,@~@.没办法,上帝给你开了一扇门,也会关个门的.

那么还有一种情况,是调用ChildWindow或者导航时,导致Closing不触发,具体的情景我就不叙述了.关键的代码是将ManinWindow保存

public static object _mainFrame;
public MainPage()
{
    InitializeComponent();
    
    if(App.Current.IsRunningOutOfBrowser)
    {
        _mainFrame = App.Current.MainWindow;
        App.Current.MainWindow.Closing += MainWindowClosing;
    }
}

尽管Silverlight5 RC已经出来,作为从SL1.0开始跟进的开发者,依然觉得SL还有许多地方可以再完善一点,限制再少一点.

转载于:https://www.cnblogs.com/626498301/archive/2011/09/05/2167473.html

OOB模式下Exit事件的处理相关推荐

  1. Release编译模式下,事件是否会引起内存泄漏问题初步研究

    题记:不常发生的事件内存泄漏现象 想必有些朋友也常常使用事件,但是很少解除事件挂钩,程序也没有听说过内存泄漏之类的问题.幸运的是,在某些情况下,的确不会出问题,很多年前做的项目就跑得好好的,包括我也是 ...

  2. 微信三方开发平台开发模式下接收事件消息推送

    了解更多内容可观看我的学院视频

  3. 有关试用Silverlight OOB模式遇到的一些问题

    1.自动更新OOB模式的问题以及怎样避免需要数字签名 关于OOB模式的在线更新需要自己实现如下代码: 1 private void OnCheckAndDownloadUpdateCompleted( ...

  4. Silverlight 5 RC新特性探索系列:12.Silverlight 5 RC 窗口模式下访问自定义DLL和WIN32 API...

    在Silverlight 5 RC版本中针对访问权限进行了相应的提升,它的项目属性中新增了一个复选框"在浏览器内运行时需要提升的信任",如下图: 它将为在浏览器模式下运行的应用程序 ...

  5. EPOLL在ET模式下会被触发多次么?

    前几天和同学一起讨论EPOLLONESHOT的作用,它的功能是这样的: 对于注册了EPOLLONESHOT事件的文件描述符,操作系统最多触发其上注册的包括可读,可写,错误中的一个,且只触发一次 刚一看 ...

  6. Intellij IDEA debug模式下项目启动慢/无法启动的事件解决过程记录

    项目无法启动了 简单的介绍一下事件过程:周一的早上,收到前端同事抛过来的一个任务,说是一个接口无法正常返回数据,于是就让他把参数发过来,我想试着在本地重现一下并且将问题修复掉,这种情况肯定是要通过de ...

  7. 《南溪的目标检测学习笔记》——验证模式下出现“Process finished with exit code 137 (interrupted by signal 9: SIGKILL)“的问题

    1 问题描述 在验证模式下运行代码的时候,出现这样的错误: Process finished with exit code 137 (interrupted by signal 9: SIGKILL) ...

  8. weex android 滑动事件,【报Bug】weex编译模式下slider组件 @scroll 事件, 滑块左右滑动, @scroll 回调的值始终是负数, 判断不了左右动作...

    详细问题描述 weex编译模式下slider组件 @change事件, 滑块左右滑动, @change回调的值始终是负数, 判断不了左右动作 weex官方文档 (DCloud产品不会有明显的bug,所 ...

  9. Chapter09-内核模式下的线程同步之事件内核对象

    有两种事件内核对象:自动事件和手动事件.当手动事件被触发时,所以该事件的等待线程都编程可调度状态:而自动事件被触发时,只有个一个等待该事件线程变成可调度状态. 下面再逐个讲解Event的相关函数: a ...

  10. epoll在ET和LT模式下读写

    在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK) 从字面上看, 意思是:EAGAIN: 再试一次, ...

最新文章

  1. 全国大学生智能车竞赛线上高校组合申请通知
  2. 做服务器_码迷SEO:细数那些做SEO巨坑的服务器们
  3. SVM+HOG:利用训练好的XML进行行人检测(检测效果)
  4. AOP—JVM SandBox—底层原理解析
  5. web页面如何实现点击按钮进行手机拨号?
  6. 干货,下载网易云课堂和B站的视频
  7. jsmind 线条_jsMind思维导图模式展示数据
  8. android视图编辑器,任何未出现在android studio编辑器中的视图
  9. android下修改hosts文件 (转自阿辉)
  10. 音乐铃声解析提取API接口
  11. php生成拟合线,excel拟合曲线怎么做
  12. 常用网络js链接大全(jQuery、bootstrap、vue、ECharts、easyUI、React、maven、Mybatis、Spring、SpringMVC、Redis)
  13. 如何在matplotlib中使用新罗马字体
  14. 怎么得到一个数的每个位c语言,怎么用位运算得到一个数是几位的
  15. 【GAOPS045】PDH(E1/T1/J1)和SDH
  16. 论文笔记(八):360 VR Based Robot Teleoperation Interface for Virtual Tour
  17. ICP算法进行点云匹配
  18. leaflet显示高程
  19. 批量提取微软必应图片
  20. 腾讯十大最受欢迎的开源项目!

热门文章

  1. html写彩虹,HTML5 Canvas彩虹粒子组成的动画文本
  2. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_17-页面静态化-模板管理-GridFS研究-存文件...
  3. 51nod1712 区间求和
  4. 小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_33、SpringBoot2.x整合Mybatis3.x注解实战...
  5. Cookie和Session的区别和联系
  6. 单片机如何产生PWM信号
  7. CodeForces 297C Splitting the Uniqueness (脑补构造题)
  8. Android-将RGB彩色图转换为灰度图
  9. Create umbraco website-On the road of umbraco (1)
  10. ajax简单做html查询删除(鲜花)