OOB模式下Exit事件的处理
在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事件的处理相关推荐
- Release编译模式下,事件是否会引起内存泄漏问题初步研究
题记:不常发生的事件内存泄漏现象 想必有些朋友也常常使用事件,但是很少解除事件挂钩,程序也没有听说过内存泄漏之类的问题.幸运的是,在某些情况下,的确不会出问题,很多年前做的项目就跑得好好的,包括我也是 ...
- 微信三方开发平台开发模式下接收事件消息推送
了解更多内容可观看我的学院视频
- 有关试用Silverlight OOB模式遇到的一些问题
1.自动更新OOB模式的问题以及怎样避免需要数字签名 关于OOB模式的在线更新需要自己实现如下代码: 1 private void OnCheckAndDownloadUpdateCompleted( ...
- Silverlight 5 RC新特性探索系列:12.Silverlight 5 RC 窗口模式下访问自定义DLL和WIN32 API...
在Silverlight 5 RC版本中针对访问权限进行了相应的提升,它的项目属性中新增了一个复选框"在浏览器内运行时需要提升的信任",如下图: 它将为在浏览器模式下运行的应用程序 ...
- EPOLL在ET模式下会被触发多次么?
前几天和同学一起讨论EPOLLONESHOT的作用,它的功能是这样的: 对于注册了EPOLLONESHOT事件的文件描述符,操作系统最多触发其上注册的包括可读,可写,错误中的一个,且只触发一次 刚一看 ...
- Intellij IDEA debug模式下项目启动慢/无法启动的事件解决过程记录
项目无法启动了 简单的介绍一下事件过程:周一的早上,收到前端同事抛过来的一个任务,说是一个接口无法正常返回数据,于是就让他把参数发过来,我想试着在本地重现一下并且将问题修复掉,这种情况肯定是要通过de ...
- 《南溪的目标检测学习笔记》——验证模式下出现“Process finished with exit code 137 (interrupted by signal 9: SIGKILL)“的问题
1 问题描述 在验证模式下运行代码的时候,出现这样的错误: Process finished with exit code 137 (interrupted by signal 9: SIGKILL) ...
- weex android 滑动事件,【报Bug】weex编译模式下slider组件 @scroll 事件, 滑块左右滑动, @scroll 回调的值始终是负数, 判断不了左右动作...
详细问题描述 weex编译模式下slider组件 @change事件, 滑块左右滑动, @change回调的值始终是负数, 判断不了左右动作 weex官方文档 (DCloud产品不会有明显的bug,所 ...
- Chapter09-内核模式下的线程同步之事件内核对象
有两种事件内核对象:自动事件和手动事件.当手动事件被触发时,所以该事件的等待线程都编程可调度状态:而自动事件被触发时,只有个一个等待该事件线程变成可调度状态. 下面再逐个讲解Event的相关函数: a ...
- epoll在ET和LT模式下读写
在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK) 从字面上看, 意思是:EAGAIN: 再试一次, ...
最新文章
- 全国大学生智能车竞赛线上高校组合申请通知
- 做服务器_码迷SEO:细数那些做SEO巨坑的服务器们
- SVM+HOG:利用训练好的XML进行行人检测(检测效果)
- AOP—JVM SandBox—底层原理解析
- web页面如何实现点击按钮进行手机拨号?
- 干货,下载网易云课堂和B站的视频
- jsmind 线条_jsMind思维导图模式展示数据
- android视图编辑器,任何未出现在android studio编辑器中的视图
- android下修改hosts文件 (转自阿辉)
- 音乐铃声解析提取API接口
- php生成拟合线,excel拟合曲线怎么做
- 常用网络js链接大全(jQuery、bootstrap、vue、ECharts、easyUI、React、maven、Mybatis、Spring、SpringMVC、Redis)
- 如何在matplotlib中使用新罗马字体
- 怎么得到一个数的每个位c语言,怎么用位运算得到一个数是几位的
- 【GAOPS045】PDH(E1/T1/J1)和SDH
- 论文笔记(八):360 VR Based Robot Teleoperation Interface for Virtual Tour
- ICP算法进行点云匹配
- leaflet显示高程
- 批量提取微软必应图片
- 腾讯十大最受欢迎的开源项目!
热门文章
- html写彩虹,HTML5 Canvas彩虹粒子组成的动画文本
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_17-页面静态化-模板管理-GridFS研究-存文件...
- 51nod1712 区间求和
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_33、SpringBoot2.x整合Mybatis3.x注解实战...
- Cookie和Session的区别和联系
- 单片机如何产生PWM信号
- CodeForces 297C Splitting the Uniqueness (脑补构造题)
- Android-将RGB彩色图转换为灰度图
- Create umbraco website-On the road of umbraco (1)
- ajax简单做html查询删除(鲜花)