Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四).doc

Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四).doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四) 前言: 在前面的系列中,我们虽然完成了其大部分功能,但是,离正真运行,还是有一大段距离 当你F5运行时,在弹出对话框之后,如果你不即时点确定,或者上个WC回来之后,你会发现已经提示出错了 这节开始,我们将对其进行一小步一小步的优化,来避免一些明显容易引发的错误。 ? 感知一下最原始的消息弹出框如下图: ? ? 一:传统消息框,容易引发命案 ? 1:原始的消息框,是线程阻塞类型的,很容易引发超时问题 线程阻塞?怎么理解? 简单的说就是,WCF服务端给客户端发送了消息提示之后,一直进入等待状态,直到玩家点了确定,这时才继续做其它事情。 ? 会产生什么问题? 玩家上WC去了?消息没人确认,自然就会超时引发异常了,而且那线程也没法接下去干其它活。 ? 解决方案? a:传统解决方案[加上倒计时,还是线程阻塞类型] ? 当初我只是想在这传统的消息框上加上倒计时自动确认,这样可以少一点避免超时情况。 于是搜了一些资料,发现要用winapi来处理,这个这个....大才小用了吧。 ? b:更优的解决方案 无意中发现Silverlight的ChildWindow,正好解决了这一问题。 因为?ChildWindow使用异步方式,非线程阻塞,消息一弹之后线程就回家去了。 而且用Sivlerlight内置的定时器DispatcherTimer,非常容易实现倒计时。 ? 二:实现自定义非线程阻塞倒计时对话框,纯种Sivlerlight ? 1:看看纯种的长成什么样 新建项目-》Silverlight?子窗口?-》起名叫MsgBox-》找另一个界面调用一下。 比如在登陆页面测试一下:MsgBox?box=new?MsgBox();box.Show(); ? 结果所见如图: 说明: 1:有背景灰色层,界面原生的还传统消息框好看多了。 2:重点提示:当初刚试的时候是直接运行MsgBox,然后在其构造函数中调用Show(),结果是出不来的。 ? 2:改造-界面小小改动 我们将原来的xaml改造成如下: controls:ChildWindow?x:Class=ChessProject.MsgBox?...省略一点...??Width=290?Height=141??Title=系统消息 ????Grid?x:Name=LayoutRoot?Margin=2?Height=97?Width=270 ????????Button?Visibility=Collapsed?x:Name=CancelButton?Content=取消?Click=CancelButton_Click?Width=75?Height=23?HorizontalAlignment=Right?Margin=0,62,93,12?/ ????????Button?x:Name=OKButton?Content=确定?Click=OKButton_Click?Width=75?Height=23?HorizontalAlignment=Right?Margin=0,62,10,12?/ ????????TextBlock?Height=41?TextWrapping=Wrap?HorizontalAlignment=Left?Margin=15,15,0,0?Name=tbMsg?Text=请按确定按钮确定?VerticalAlignment=Top?Width=224?/ ????/Grid /controls:ChildWindow ? 界面效果如图,和上图差不多[这里把取消放在前面,只是为了不显示取消时,确定还保留在原位好看点]: ? 3:改造,在标题加入倒计时 a:加入计时器并初始化 ???????DispatcherTimer?timer;//定时器 ????????public?MsgBox() ????????{ ????????????InitializeComponent(); ????????????timer?=?new?DispatcherTimer(); ????????????timer.Interval?=?TimeSpan.FromSeconds(1); ????????????timer.Tick?+=?new?EventHandler(timer_Tick); ????????} b:新加show方法并实现倒计时 ???????int?defaultTime?=?3;//默认N秒 ????????string?userTitle; ???????DispatcherTimer?timer;//定时器 ????????public?MsgBox() ????????{

文档评论(0)

rovend + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档