.NET反射和接口的混合使用

通过反射和接口的结合,本文介绍如何在.NET中实现通用的定时任务框架,使得每次只需关注业务逻辑,而不需要重复编写定时执行的基础设施代码。文中详细解释了如何在WinForm应用中使用Timer和BackgroundWorker组件,并通过反射动态调用实现接口的类,以达到灵活配置和复用的目的。
摘要由CSDN通过智能技术生成

最近我写了几个定时上传数据的小程序,感觉自己不是程序员,而是代码搬运工。重复的事情做起来总是很令人烦恼,那有什么办法解决这种问题呢?定时执行的功能都是一样的,只是每个程序需要处理上传的数据是不一样的。通俗地说,我就是想写好定时运行的功能,未来还有定时执行程序的时候,我只要专注实现业务就好了。
这个问题可以使用反射和接口完美的解决。我们在winform界面添加Timer和BackgroundWorker组件,Timer控件用来实现定时,BackgroundWorker控件实现后台异步执行任务,这种组合能够完美地解决界面假死的问题。组件使用代码如下:

private void timer1_Tick(object sender, EventArgs e)
        {
            DateTime dtNow = DateTime.Now;

            if ((this.frenquecyID == "D" && dtNow.Hour == uploadDateTime.Hour && dtNow.Minute == uploadDateTime.Minute && dtNow.Second == uploadDateTime.Second)
                 || (this.frenquecyID == "H" && dtNow.Minute == uploadDateTime.Minute && dtNow.Second == uploadDateTime.Second) 
                 || (this.frenquecyID == "M" && dtNow.Second == uploadDateTime.Second)|| this.frenquecyID == "S")
            {
                if (isRunning) return;

                isRunning = true;//执行中

                this.backgroundWorker1.RunWorkerAsync();
            }
        }

timer控制定时任务执行方式,天、小时、分钟或者秒为频次执行业务。Timer的Tick事件中,我们判断频次,判断当前时间是否与预定的执行时间相同,假如符合频次和时间相同的条件,我们就异步执行BackgroundWorker的DoWork事件。
我们接下来,看一下BackgroundWorker的DoWork事件实现。

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            operationInterfaceProxy.ProcessData();
        }

看到了吗?其实很简单,就是执行业务代理的操作而已。
接下来,我们要看一下接口代理类(OperationInterfaceProxy)的实现,代码如下所示:

using System;
using System.Collections.Generic;
using S
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

panliuwen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值