起名Silverlight+WCF 实战-网络象棋最终篇的无线程阻塞倒计时窗口(四)

题目和书面的写法*

提问型(设问)、解说型(陈述)、再配合平面设计

前言:

目录的写法

好找的数目才是发出价之数码

完标题……细分整体标题……目的……最终目标……具体讲述……个别行动实施方案……可以这样形容:活动1(略)……内容……概要……

每当前面的文山会海被,我们则完成了那个大部分效能,但是,离正真运行,还是生同样老截距离

谋划小组成员的写法

写清职务,经验,联系方式等等。

润:增加权威性;可以当报道录用;如中来哲人(拍X领导马屁的会),可若提案顺利通过;有福同享……

当您F5周转时,在弹出对话框之后,如果您不纵时点确定,或者达到独WC回来后,你会发觉曾提醒有错了

托内容的写法

面无人色那帮孙子改变主意,明明您做了客户S要的A,过后就赖说要是之是B。

规章:XXX委托内容:
直代表:XXX,
委托日期:XXX,
信托内容大概:123,
策动目标:123,
日程安排:X日交X日,
预算方案:总XXX,详情见附件。
作业范围:从图的日自至值钱公司关门。

这节开始,我们以对准那进展同样不怎么步一略带步的优化,来避免有引人注目轻引发的荒谬。

序言的写法*

面前三行的上下决定了人们愿意不乐意就念下来。

例:前言
主题背景:地震了后,大家都可能会见死掉
指出方向:但您要有时机在下来地
设定条件:只要您放我的,肯吃人,就得能够在下来
最后致词:衷心感谢请自己耶你来意见,希望今后能长期合作

 

摘要的写法

前提=制约

盖结论有也着力,用图或列举法将内容简洁明了地表述。如果写的非如愿,或不顺眼,那便是您对主题咀嚼的未充分,刷刷牙再体会,原理可参考爱因斯坦相当于丁容易所以“美”来衡量一个公式是否也真理。

章:本策划案的前提条件(制约条件):三万块钱、在后天午不时前面完成、不用外人

前提条件含意:预算范围、时间限制、保密限制

前提条件对本策划案的震慑:没钱请无至高手、过时头就是绝了、泄密人就是不好救了。

前提条件解决后有所的效益:请来了独具丰富劫法场经验的职业杀手李逵;可以以宋江活着时将他解救出。

感知一下最老之音讯弹来约而下图:

体现全貌写法

以新闻搜集、分析等流程也中心,可以跟取要结束合在一起。

规章:策划目的:你要是干啥
图环境:什么问题导致你切莫这么干不行
策动前提条件:你得有人、有钱、有东西
谋划内容:这么这么干
图谋效果:达到目的了
内部关联性:把上几乎桩用线每联起来,在线中部将个小框框写之间的联系。

 

谋划环境写法

诠释策划案的必然性:根据现状,只有你这样干了,才可能解决问题。

数据资料:只提炼中心,力求言简意赅。可用添加附表或参考资料的形式上。

起名 1

概念的写法*

概念打造是丁玩积木,将各式各样的定义,自由组合加工。

概念置换法:

拿原先商品特性用重新有趣的用语替换。如,自行车来抢、轻、敏捷三颇特征,羚羊也产生,所以起名羚羊牌。

概念提取法:

慎选新鲜的性状(我产生你无)。如7-11立的新。

概念统一法:

把ABCD4单东西将在一块,然后统一个概念:“ABCD富二代底象征!”

 

策动目的的写法*

留意!是目的不是意思,目的是贯彻,但希望不必然能够落实。

留神前提与环境的制约。

同样:传统消息框,容易引发血案

策动内容的写法*

情因的是促成目的的实际行动方案,是策划案最要之一些。

在意,要拿圆策划和局部策划的关联性写出来。

 

策动着问题点之写法

靠近:虽有问题A,但图仍有执行价值。

贴近:现阶段是问题B,干是勿涉,请领导商定一下。

修:大家应把精力放在A处。

学习:领导们可不要考虑问题B,这个题材用以生路得到化解。

1:原始之消息框,是线程阻塞类型的,很爱吸引超时问题

策动效果的写法

定要是写预测效果

未考虑利润的报而打策划的大有人在,别干得策划成功了号倒闭了。

线程阻塞?怎么理解?

策动预算的写法*

拿可能转变费用,和一贯用分别记述

要是描写明细,别胡乱汇总,那样会显示事起无为都数据大

简单易行的游说不怕是,WCF服务端给客户端发送了音提示之后,一直上等状态,直到玩家点了确定,这时才继续举行任何事情。

图日程的写法*

总天数

启日

讫时间

分别作业的有血有肉日子

恒作业的固定性、变动性之别

变动性作业的造化计算

分级作业中的关联性(用图形表示,先开谁后做谁)

 

基本功资料、参考事例的写法*

写于附页上

有书面和目录更优秀

假如,XXXXX调查报告……1(对应正文第9页)

会见有什么问题?

总结:不用面面俱到,部分足省略、合并

玩家上WC去矣?消息尚未人认可,自然就是会过引发那个了,而且那线程也无奈衔接下去干任何生活。

 

釜底抽薪方案?

a:传统解决方案[加上倒计时,还是线程阻塞类型]

 

那会儿自家只是想在当时风的消息框上丰富倒计时活动确认,这样好掉一点免过情况。
于是乎搜了有些材料,发现而为此winapi来处理,这个是….大才小用了吧。

 

b:更美好的化解方案

无意中窥见Silverlight的ChildWindow,正好解决了及时等同题材。
坐 ChildWindow使用异步方式,非线程阻塞,消息无异于弹之后线程就回家去矣。
还要因此Sivlerlight内置的定时器DispatcherTimer,非常容易实现倒计时。

 

亚:实现自定义非线程阻塞倒计时对话框,纯种Sivlerlight

 

1:看看纯种的长大什么样

新建项目-》Silverlight 子窗口 -》起名叫MsgBox-》找另外一个界面调用一下。
依当登陆页面测试一下:MsgBox box=new MsgBox();box.Show();

 

结果所见要图:

起名 2

说明:

1:有背景灰色层,界面原生的还人情消息框好看多矣。
2:重点提示:当初刚试的时候是直接运行MsgBox,然后于那构造函数中调用Show(),结果是发无来之。

 

2:改造-界面小小改动

咱俩以本的xaml改造成如下:

起名 3起名 4

<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>

 

界面效果使图,和及图多[此拿取消在前方,只是为着不显取消时,确定还保留在原位好看点]:

起名 5

 

3:改造,在题加入倒计时

a:加入计时器并初始化

起名 6起名 7

       DispatcherTimer timer;//定时器
        public MsgBox()
        {
            InitializeComponent();
            timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromSeconds(1);
            timer.Tick += new EventHandler(timer_Tick);
        }

b:新加show艺术并促成倒计时

起名 8起名 9

       int defaultTime = 3;//默认N秒
        string userTitle;
       DispatcherTimer timer;//定时器
        public MsgBox()
        {
            //…省略…
        }
        void timer_Tick(object sender, EventArgs e)
        {
            Title = string.Format(userTitle + ” [倒计时活动确定:{0}秒]”, defaultTime);
            defaultTime–;
            if (defaultTime == 0)
            {
                ResetTimer();
            }
        }
        void ResetTimer()
        {
            timer.Stop();
            defaultTime = 3;
        }
        public void Show(string msg, string title)
        {
            tbMsg.Text = msg;
            userTitle = title;
            Show();
            timer.Start();
        }

c:再调用一下押结果

MsgBox box = new MsgBox();
box.Show(“http://cyq1162.cnblogs.com","路过秋天”);

如图:

起名 10

 

4:扩展show函数:加入回调/倒计时日/按钮类型/默认确认品种

率先:这个子窗口是异步的,所以,在点击了确定时,需要充实多一个回调函数;
进而:默认3秒,很肯定状态各异,时间为只要略微为搭反一下;
下一场:有时候按钮只是规定,有时候就算取消+确定;

说到底:倒计时时及了,默认执行规定,还是实行撤销。

 

于是,要兑现了:

a:如何贯彻回调?

默认子窗口就有Closed事件,我们因而它的风波,在点击确定要撤销时,执行Close()方法

起名 11起名 12

        public MsgBox()
        {
            InitializeComponent();
            timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromSeconds(1);
            timer.Tick += new EventHandler(timer_Tick);
            this.Closed += new EventHandler(MsgBox_Closed);
        }
        void MsgBox_Closed(object sender, EventArgs e)
        {
            //待实现
         }
        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;
            Close();//调用一下关
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
            Close();//调用一下闭馆
        }

 

问题?我们难道对具有的确定还推行同样的代码?

率先说:异步不能够如一道那样写if(show(xxx,xxx)){方法}
于是说:这是只大严重的题目,因为不同的规定,我们尽之轩然大波肯定是例外的。

 

解决问题?匿名委托出手了!!!

匿名委托:[Action<T1,T2,T3…N个重载>],这是单可怜好用之东东,可以传进方法名称,在推行后调整用不同的章程。

 

匿名委托实现:

Action<bool> callBackEvent;//全局定义

void MsgBox_Closed(object sender, EventArgs e)
{
    if (callBackEvent != null)
    {
        callBackEvent(DialogResult.Value);
    }
}

 

那么托是哪些传播的?Show方法增加扩展参数传入。

b:这里贴有总体代码,一并实现:倒计时光阴/按钮类型/默认确认品种

起名 13起名 14完整的MsgBox代码

    public partial class MsgBox : ChildWindow
    {
        int defaultTime = 3;//默认N秒
        string userTitle;
        DispatcherTimer timer;//定时器
        Action<bool> callBackEvent;
        bool autoOKConfirm = true;
        public MsgBox()
        {
            InitializeComponent();
            timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromSeconds(1);
            timer.Tick += new EventHandler(timer_Tick);
            this.Closed += new EventHandler(MsgBox_Closed);
        }
        void MsgBox_Closed(object sender, EventArgs e)
        {
            //待实现
        }
        void timer_Tick(object sender, EventArgs e)
        {
            Title = string.Format(userTitle + ” [倒计时活动确定:{0}秒]”, defaultTime);
            defaultTime–;
            if (defaultTime == 0)
            {
                ResetTimer();
                if (autoOKConfirm)
                {
                    OKButton_Click(null, null);
                }
                else
                {
                    CancelButton_Click(null, null);
                }
            }
        }
        void ResetTimer()
        {
            timer.Stop();
            defaultTime = 3;
        }
        public void Show(string msg, string title)
        {
            Show(msg, title, defaultTime, null, true, MessageBoxButton.OK);
        }
        public void Show(string msg, string title, int timeSecond, Action<bool> callBack)
        {
            Show(msg, title, timeSecond, callBack, false, MessageBoxButton.OKCancel);
        }
        public void Show(string msg, string title, int timeSecond, Action<bool> callBack, bool autoOK, MessageBoxButton button)
        {
            tbMsg.Text = msg;
            userTitle = title;
            if (button == MessageBoxButton.OK)
            {
                OKButton.Content = “确定”;
                CancelButton.Visibility = System.Windows.Visibility.Collapsed;
            }
            else
            {
                CancelButton.Visibility = System.Windows.Visibility.Visible;
                OKButton.Content = “同意”;
                CancelButton.Content = “拒绝”;
            }
            defaultTime = timeSecond;
            autoOKConfirm = autoOK;
            callBackEvent = callBack;
            Show();
            timer.Start();
        }
        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }
    }

 

 

其三:接下便是搬运工活了,把本来采用传统对框的提示,通通改过来。

其一改变之点有点多,留到下节MsgBox使用时细细说了。

 

最终达到一致事实上用被之觊觎:

起名 15

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图