利用Event实现WinUI层与Bussiness层 跨层间动态提示

在项目架构时,首先我们会考虑采用WINUI层与Bussiness层分离的N层结构。那么在WinUI层与Bussiness层之间一些动态提示,可采用Event来实现。
比如,Bussiness层中要对n条数据进行foreach的逐条处理,需要在WinUI层的某Form中看到对应的状态提示,包括进度条progressBar,同时ListBox中也要有对每条记录的处理状态进行提示。
我不提倡将progressBar等对象传递到Bussiness层,这样耦合太强。
也不提倡在WinUI方用Timer等轮训去查Bussiness层中的执行状态,这样负载大,同时有漏掉某些状态提示。
采用事件触发方式,可以完美的解决这个问题。
下面是示例,图是我们需要的效果:
EventTest.jpg

这个类是放在Bussiness层的数据处理类:
 1 None.gif using  System;
 2 None.gif using  System.Threading;
 3 None.gif
 4 None.gif namespace  WinTest
 5 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 6InBlock.gif    public delegate void ProgressEventHandler(int CurrNumber,string CurrText);
 7ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
 8InBlock.gif    /// EventLog 的摘要说明。
 9ExpandedSubBlockEnd.gif    /// </summary>

10InBlock.gif    public class EventLog
11ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
12InBlock.gif        public event ProgressEventHandler ProgressEvent;
13InBlock.gif
14InBlock.gif        public EventLog()
15ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
16InBlock.gif            //
17InBlock.gif            // TODO: 在此处添加构造函数逻辑
18InBlock.gif            //
19ExpandedSubBlockEnd.gif        }

20InBlock.gif
21InBlock.gif        public void Run(int MaxCount)
22ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
23InBlock.gif            for(int i=1;i<=MaxCount;i++)
24ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
25InBlock.gif                Thread.Sleep(500);
26InBlock.gif                ProgressEvent(i,"当前处理条目为:"+i.ToString());
27ExpandedSubBlockEnd.gif            }

28ExpandedSubBlockEnd.gif        }

29ExpandedSubBlockEnd.gif    }

30ExpandedBlockEnd.gif}

31 None.gif

下面这段是在UI层的某Form的执行代码:
 1 None.gif private  EventLog log;
 2 None.gif public  Form1()
 3 ExpandedBlockStart.gifContractedBlock.gif         dot.gif {
 4InBlock.gif            //
 5InBlock.gif            // Windows 窗体设计器支持所必需的
 6InBlock.gif            //
 7InBlock.gif            InitializeComponent();
 8InBlock.gif
 9InBlock.gif            //
10InBlock.gif            // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
11InBlock.gif            //
12InBlock.gif            log=new EventLog();
13InBlock.gif            log.ProgressEvent +=new ProgressEventHandler(log_ProgressEvent);
14ExpandedBlockEnd.gif        }

15 None.gif private   void  btnEventLog_Click( object  sender, System.EventArgs e)
16 ExpandedBlockStart.gifContractedBlock.gif         dot.gif {
17InBlock.gif
18InBlock.gif            if(txtMaxCount.Text.Trim()!=String.Empty )
19ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
20InBlock.gif                this.progressBar1.Minimum =1;
21InBlock.gif                this.progressBar1.Maximum =int.Parse(txtMaxCount.Text.Trim());
22InBlock.gif                ThreadStart workThreadStart = new ThreadStart(MethodRun);
23InBlock.gif                Thread workThread = new Thread(workThreadStart);
24InBlock.gif                workThread.IsBackground=true;
25InBlock.gif                workThread.Start();
26ExpandedSubBlockEnd.gif            }

27ExpandedBlockEnd.gif        }

28 None.gif
29 None.gif         public   void  MethodRun()
30 ExpandedBlockStart.gifContractedBlock.gif         dot.gif {
31InBlock.gif            log.Run(int.Parse(txtMaxCount.Text.Trim()));
32ExpandedBlockEnd.gif        }

33 None.gif
34 None.gif         private   void  log_ProgressEvent( int  CurrNumber,  string  CurrText)
35 ExpandedBlockStart.gifContractedBlock.gif         dot.gif {            
36InBlock.gif            progressBar1.Value =CurrNumber;
37InBlock.gif            this.lboxEventLog.Items .Add(CurrText);                         
38ExpandedBlockEnd.gif        }

执行结果如图所示。

转载于:https://www.cnblogs.com/Jinqin/archive/2006/01/14/317109.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值