Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示(八)
前言:
一:分析问题产生的原因?
1:首先看App.xaml,里面定义了一个全局客户端回调:
并且这个回调我们全局只实例化一次,并且默认加载时定位到登陆页面:
{
this.RootVisual = root;
root.Children.Add(new Login());//默认定位到登录页面。
}
2:再看登录页面Login.xaml里,构造函数的初始化:
{
InitializeComponent();
App.client.LoginCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(client_LoginCompleted);
Load();
}
我们对App.client.LoginCompleted初始化了一次事件,这时一切是正常的,接着我们进入房间,之后,我们返回系统回到登陆。
3:接着看退出系统的按钮是怎么返回到登陆页面的:
private void btnLogout_Click(object sender, RoutedEventArgs e)
{
if (App.chess.IsGaming)
{
btnGameLose_Click(null, null);//发送认输
App.chess.IsGaming = false;
}
App.client.OutRoomAsync(App.player, App.player.RoomID, App.player.AttachInfo);
((App)Application.Current).RedirectTo(new Login());
}
看最后一行,我们又New Login了,这种情况,刚才第二步中的:App.client.LoginCompleted事件将被重复注册,因此,重复的事件注册引发了重复的消息提示。
问题总结说明:
二:解决消息重复问题
先来看一下错误任法:注册事件前加先减,再加,示例代码如下:
App.client.LoginCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(client_LoginCompleted);
网上有人说:每次注册前先去掉一下,然后再增加,逻辑上看起来好像没问题,刚自己试了下,纯忽悠型。
现在介绍下我想到的两种方式:
1:定义全局变量List<事件名称>,保存注册过的事件名称
2:定义全局变量保存所有房间,于是在RedirectTo切换房间的时候,避免使用New 控件() 来避免再次执行事件注册事件
下面进行代码整改:
A:App.xaml全局定义每个房间的变量,并改造成属性,所幸控件就几个,定义也费不了多少力,代码如下:
public static Login LoginObj
{
get
{
if (loginObj == null)
{
loginObj = new Login();
}
//loginObj.Reset();
return loginObj;
}
}
private static Room roomObj;
public static Room RoomObj
{
get
{
if (roomObj == null)
{
roomObj = new Room();
}
//roomObj.Reset();
return roomObj;
}
}
private static Index indexObj;
public static Index IndexObj
{
get
{
if (indexObj == null)
{
indexObj = new Index();
}
//indexObj.Reset();
return indexObj;
}
}
说明:
B:查找调用RedirectTo切换界面的代码,替换为:App.xxxxObj
说明:
OK,消息提示重复的问题,至此,是解决了,但是,将产生一点副作用,就是切回去的时候,状态需要重置。
简单的示例说明就是:
OK,状态重置的问题,就留到下节解决了。
本节没关联啥好看图片,就随便挂一张在下面让大伙欣赏了:
最后:谢谢大家对本系列的喜欢,谢谢支持~
同时欢迎大家多到 秋色园 走走~~~
PS:传说点一下推荐会有10个园豆的规则已经取消了,不过,喜欢的还是可以点一下“推荐”,thank you very much!!
Silverlight+WCF 实战-网络象棋最终篇之解决重复的消息提示(八)相关推荐
- Silverlight+WCF 实战-网络象棋最终篇之对战视频-下篇[客户端发送与服务端中转](六)...
本篇继上一篇:Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五) 一:对战视频 简单原理 略,内容见上篇. 二:对战视频 步骤解析: 略 ...
- Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)...
前言: 近期在忙点"秋色园"的事情,所以网络象棋这一块文章就写的相对慢,而且刚好接上篇:Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四) 之后, ...
- Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四)
前言: 在前面的系列中,我们虽然完成了其大部分功能,但是,离正真运行,还是有一大段距离 当你F5运行时,在弹出对话框之后,如果你不即时点确定,或者上个WC回来之后,你会发现已经提示出错了 这节开始,我 ...
- Silverlight+WCF 新手实例 象棋 主界面-事件区-求和认输(三十二)
在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 事隔几篇,我们又回到事件区,继续其它两个按钮事件,来张图吧: 在Silverlight+WCF 新手实例 象棋 主界面-事件区- ...
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放-结局(四十)
在线演示地址: Silverlight+WCF 新手实例 象棋 在线演示 在Silverlight+WCF 新手实例 象棋 主界面-棋谱-回放(三十九)中,我们实现了用户的棋谱回放,在文章的下面,我们 ...
- Silverlight+WCF 新手实例 象棋 主界面-棋谱-获取列表(三十八)
2019独角兽企业重金招聘Python工程师标准>>> 在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 在Silverlight+WCF 新手实例 象棋 主界 ...
- Silverlight+WCF 新手实例 象棋 主界面-实时聊天区(二十五)
在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 演示已更新到此节介绍:Silverlight+WCF 新手实例 象棋 介绍III(二十三) 本节连着Silverlight+WC ...
- Silverlight+WCF 新手实例 象棋 该谁下棋-B下A停(三十)
2019独角兽企业重金招聘Python工程师标准>>> 在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 上上一节,就是二十八节:Silverlight+WCF ...
- Silverlight+WCF 新手实例 象棋 主界面-事件区-返回退出(三十三)
在线演示地址:Silverlight+WCF 新手实例 象棋 在线演示 还是那张图: 本节实现返回大厅和退出系统: 一:返回大厅,其实很简单的说,就是转向房间列表了. 可是,转向前也有很多事情要处理的 ...
最新文章
- ARKIT/ARCore对比分析(二)
- 2345浏览器网址_2345网址导航回应“浏览器主页劫持”丨开发者日报
- MATLAB从入门到精通-MATLAB2021版类似excel的坐标轴标签自动缩放布局
- python之初体验(一)
- Inna and Sequence
- linux 用mutex定义一个linkedlist,【基于LINUX的操作系统实验教程最终版材料】
- 第八次立会顺利召开!
- python入门经典代码-【python】编程语言入门经典100例--11
- [转]C#.NET中动态添加与删除控件
- python 散点图点击链接图片_Python数据可视化——散点图
- 银行岗位的“香饽饽”—金融科技岗
- 2022年电工杯B题应急物资配送问题浅析
- 计算机最新一区sci,人工智能容易发的SCI期刊_2019中科院jcr期刊分区_2019中科院最新分区...
- abb机器人goto指令用法_详解ABB机器人编程含中英文指令对照
- LED背光源和LED背光灯区别
- 计算机应用程序没声音,电脑没有声音怎么办,五个步骤解决电脑没声音
- ARP断网攻击与监听
- win7工作组计算机无法连接打印机,win7无法访问共享打印机怎么解决
- 水墨画风格首页HTML+CSS
- 股票入门浅学20210721
热门文章
- java properties读取 封装_java properties 文件读取踩坑记
- 半导体基础知识(4):无源,有源和机电组件
- Spartan-6的BRAM(Block RAM)模块和DSP 模块XtremeDSP
- Windows自带的端口转发工具netsh使用方法_DOS/BAT
- HenCoder Android UI 部分 2-3 定制 Layout 的内部布局
- 使用jQuery的9个误区
- #mysql50#_#mysql50#.ssh设个啥数据库?
- 异步复位和同步释放电路的详细解释
- linux命令行 正则,在Linux命令行中使用正则表达式
- 机器学习-Andrew Ng课程笔记