您的位置:程序门 -> .net技术 -> c#



一个windows服务相当棘手的问题。


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


一个windows服务相当棘手的问题。[已结贴,结贴人:beyondjay]
发表于:2007-03-31 11:29:45 楼主
遇到一个比较棘手的问题。
需求是要求一个windows   service隔几分钟执行一次比较耗资源的任务,有一个winform可看到下次任务执行的时间。我知道这不是最好的方案“计划任务”更合理,但是就是这么要求的。
本来觉得windows   service自己轮询比较好些,但是我找不到如何使得windows   service当中的thread通知winform下次任务何时执行的办法。因为如果这样写,两个东东就是互相独立的,我是c#小鸟,这个可能要调api吧。
我现在采用的是比较笨但是也比较容易控制的办法,一个winform上的定时器定时启动windows服务执行完就停止服务,这个倒是简单,但是由于执行的是比较耗资源的任务,比如说定时间隔是2分钟,但是可能2分钟这个任务还没执行完,这就要求windows   service通知winform不要急着start这个服务,等到下个轮询再执行。
其实问题总结下来还是windows   service如何通知winform的问题。
或者退一步,windows服务如何自己停止自己的服务,能做到吗?windows   service开的线程等任务执行完就自己停止自己的这个服务,我担心可能会报错咯。
现在又想到一个方法,winform中弄个全局变量,执行完了就置为true,但是又有新问题,如果windows服务出问题了一直是started怎么办?
大家给点方案吧。
发表于:2007-03-31 11:58:581楼 得分:50
建个配置参数存取机制.如:注册表,ini,config...都行!推荐ini文件,启用filesystemwatcher来监视这个文件夹,发现配置文件已更改就让这个窗体执行你想要的动作。否则可使用timer总是来检查其服务忙状态(配置项 "servicebusyflag "的值。).

服务执行完后就写入:
cfg[ "servicebusyflag "]   =   false;//忙标志,在start时,设置为true;
cfg[ "finishdatetime "]   =   datetime.now;//最后执行时间
然后自动停止服务运行;
发表于:2007-03-31 12:05:262楼 得分:20
服务里处理完后把信息写入eventlog,winform每隔一段时间读eventlog。
我就想到这点,应该还有其它方法
发表于:2007-03-31 12:31:073楼 得分:10
学习,up
发表于:2007-04-01 09:05:354楼 得分:10
up
发表于:2007-04-01 14:08:585楼 得分:0
高手来帮忙阿
发表于:2007-04-01 14:13:226楼 得分:20
通过第三方程序来完成通知功能,一般使用一楼所述的方法。如果你的操作是将面向数据库,那么,可以使用数据库来完成通知。

在win   service及winform中均使用timer来取通知(一般在winform中)及发布通知(一般在service中)。
发表于:2007-04-01 15:51:207楼 得分:90
同意3tzjq(永不言弃),darkh0rse(nooooob=> nb   进化中...)   的方法。
    我们以前做项目也遇到这种情况,说的是一个大的安装程序中有个数据导入的前提条件(要很长时间,也是自己写的另外一个应用程序代码),结果我采取的是写入注册表的方法。大程序中查看注册表中的相应字段标志以确认该前提条件是否已经执行成功,决定下一步要不要做。
    其他ini,config,文件流等方式都可以.........   这种方法最简单,其他我也不会。   呵呵!


快速检索

最新资讯
热门点击