All posts by 龙生
[星云大师] 忙,就是营养
有一段时期,一连有好几位徒众因身体有病而住在如意寮中静养。为我开车多年,曾经担任人事监院的永均法师问我:「那些人看起来身体很好,但每天又无所事事,为什么那么多病?我们每天忙碌不已,身兼数职,为什么反而身体健康不生病呢?」我随口回答他:「因为忙,就是有营养啊!」不料这句话在徒众间流传起来,成为一句法语。回想起来,我的一生的确是因为「忙」,才少病少恼,身健心安。 童年时代,我就很喜欢忙。每天鸡鸣而起,忙着帮大人插秧、除草、放牛、养鸡,忙着和同伴捉泥鳅、找蟋蟀、玩纸牌、说故事。甚至连吃饭、睡觉都是在忙中度过。即使生病,也是在忙的里面,似有似无地打发过去。忙,不但强健我的体魄,也长养我的耐力。 及至我十二岁出家之后,虽然生活方式有所改变,但是忙碌依旧,所以我从来没有适应上的困难。记得那时我忙着早晚课诵、上课读书,忙着出坡作务、挑柴担水,忙着看守林园、捉拿山林小偷、护卫山门,甚至忙着立菩提愿、发增上心,忙着念佛号,忙着打腹稿……,几乎到了无事不忙,无处不忙的地步。这样从早到晚,忙此忙彼,不但于己丝毫无损,反倒强化我的身心,增加我的人缘。 由于我经常自动自发帮忙菜园工作,所以园头不时送我两棵白菜、几粒番薯姜,让我带回去烧汤煮面,与同学共享,彼此皆大欢喜。尤其在隆冬的夜晚,三五好友蹲踞厨房一角,一面忙着偷吃面条,一面忙着闪躲纠察老师,既刺激,又温馨。如今回味起来,依然乐趣无穷。 每个月常住创办的《中流杂志》出刊时,我也总是义务地前往协助包装寄发。一天忙碌下来,不但赢得师长的赞美,而且还能获赠一份杂志做为酬劳,使我能免费阅读,先睹为快。这对于嗜书如命,却阮囊羞涩的我而言,真是无上的珍宝。 就读佛学院期间,我不但每天发心煮放参(晚饭)供养大众,也时常到常住的织布工厂里帮忙。虽不曾多吃一粥一饭,也未尝得到一丝一缕的赐赠,但在忙的同时,我深深了解物力的艰难与缘起的妙用,一生受用无穷。 所以,在「忙」中,有数不尽的乐趣;在「忙」中,有无限的喜悦;在「忙」中,能安身立命;在「忙」中,能多所体悟。「忙」的生活实在太美妙了!在「忙」中,我感觉到懒惰懈怠实在就是罪恶。 为了照顾一窝刚生下来的小老鼠,我将它们偷偷藏在抽屉里,每天咬破饭粒慢慢喂食。看着它们从全身无毛到一身乌亮,从未睁双眼到活蹦乱跳,我感受到生命之可贵在于跃动不息,身为万物之灵的人类焉能不将自己「忙」起来呢? 为了同学赠送的几条蚕宝宝,我在读书作务之余,跑全山,摘桑叶,一面注意它们的温饱情况,一面还要避免被老师发现,一直养到它们长大成蛾,破茧而出。这些点滴体验,让我及早深入「虽忙犹闲」的三昧,对于我未来的弘法事业具有莫大的帮助。 在佛学院图书馆兼任管理员期间,我除了夜以继日整理「活页文选」之外,还经常忙里偷闲,翻看《水浒传》、《三国演义》、《基度山恩仇记》等中外名著。甚至在开大静之后,点着线香躲在棉被里偷偷阅读,直至天亮。就这样数年之间,拜忙中自修之赐,我不但得以遍览群书,更激发对文学的深厚兴趣。 老师的一声令下,我忙着奔走油印,供给教材;同学的一句要求,我忙着整理讲义,装订成本。忙,使我得到师长的肯定;忙,使我得到同侪的友谊;忙,使我意识到集体创作的重要;忙,使我感受到同心协力的意义。在闭塞的深山丛林里,虽不曾阅读「青年守则」,但我早已体会「助人为快乐之本」的真谛。观世音菩萨因为二六时中忙着寻声救苦,地藏王菩萨由于时时刻刻忙着地狱度生,所以赢得佛子们的顶礼赞叹。因此,忙是善举,忙是利行,忙是情义,忙是功德。忙,才是佛法的真谛。 一九三七年,卢沟桥事变点燃中日间的战火;八年后,艰苦的抗战终于结束,未曾休养生息,又遇国共之争。十余年间,我与一般苦难的中国人一样,忙着逃难,忙着流亡,忙着防空袭,忙着躲战火,忙着救济伤亡,忙着收容孤老。忙,给我机会,让我从扬州乡下来到南京栖霞,让我由童蒙无知直至出家求学,让我从山林僻野走向社会群众,让我从徐蚌会战来到台湾施展弘法利生的抱负。 刚开始时,为着一个开示,我往往忙了几个通宵,准备讲稿;为了一篇文章,我经常忙了几个夜晚,搜索枯肠。虽然未曾领过任何钟点费,亦未曾得到任何稿酬,但是看着台下的群众由少而多,由点头会意到拍手鼓掌,看着自己的一笔一画印成方方正正的铅字,刊在每期的《菩提树》、《人生》、《觉生》、《自由青年》等报章杂志上,一股强烈的成就感不禁油然而生,充塞胸怀,实非锦衣玉食、华厦美屋之乐所能比拟。在忙中,我充分领略服务奉献,不求报偿的法喜。所以,我能有能无,能苦能乐,能大能小,能进能退。 为了让一本书及早付梓,我曾经守在深山草棚里达一个月之久,趴在尘泥地上,以大地为桌案,奋笔疾书,写出我对人间佛教的理想。为了让一本杂志如期出刊,我时时饿着肚子,从台北大理街走到万华火车站,坐火车到老北投,再转公车到新北投,摸黑步行至山顶,将一本新印的刊物交到老法师手上,才松了一口气。每次完稿,望着鱼肚白的天色,再看看表,往往已是凌晨时分。虽然我整天忙得无人无我,无日无夜,但在我不仅未曾减少什么,反而增进了信心道念。 一九五一年,我担任佛教讲习会教务主任,每天起早睡晚,忙着带领学生做早晚课诵、出坡劳动,忙着准备授课及批改作业。此外,还得忙着圈点八十余本的学生日记及辅导学生的生活。一个月下来,整整瘦了五公斤。尽管如此,我的心灵却在忙碌中逐渐提升,我的视野也在忙碌中逐渐开阔。忙,开启人人本具的潜能;忙,发掘方寸自有的宝藏。所以,我喜欢忙。借着忙,我精进奋发,自强不息。 古人说:「书中自有黄金屋,书中自有颜如玉。」四、五十年前,正是民生困乏的时代,有人又说:「教书自有香菇面,教书自有好供养。」但我觉得,教书之乐不在丰衣美食,而在灌输大家正确的观念。所以每次收到些微稿费或嚫钱时,我总是拿去购买佛书,与佛子们结缘。忙着做一些有意义的事,实在比黄金屋、颜如玉、香菇面、好供养更有价值。记得那时我常常为了一场讲座,从宜兰坐上一天的火车到高雄,演说完毕,又从高雄乘夜车回到宜兰。在北宜线、纵贯线上,我虽然耗费了无数光阴,但生命的力量却随着滋长,怎不叫人欢喜?除了定期的讲演之外,我马不停蹄,忙着到工厂为劳工开示,到码头为渔民布教,到监狱为受刑人皈依,到军营为官兵们说法。有人说时间难捱,我却觉得一天二十四小时瞬息即过,恨不得一天能有四十八小时可以使用。 那时,台湾的出租车刚刚开始营业,我偶尔为了赶路,不得不以出租车协助自己奔忙。每当里程表跳动一次,我的心脏也随之起伏跳动。又要忙碌,又想省钱的滋味固然颇不好受,但是每当望着台下听众心开意解的表情,看着身边的工作能够完成,心中的喜悦真是无与伦比。 民国五十年以后,各个大学纷纷成立佛学社团,广播电台也增辟佛教节目,一向喜爱文教的我益形忙碌起来。我不但为寺院服务,为信徒讲经,还要为学生授课,为电台供稿,整天像个陀螺一样转个不停。虽然如此,我仍感到忙得不亦乐乎。 为了寺院的落成开光、住持晋山,我经常南北奔跑,亲往参加;为了信众的婚丧喜庆,我往往毫不犹豫,前去致意。渐渐地,应酬日增,但因深恐人情不够,所以只有自己忙碌,不愿对别人失礼。虽说凡事已克尽己心,无奈仍有未如人意之处。我深深感到,未成名时,忙,是一种快乐的修行;成名之后,忙,有时却成为一种艰难的负担。俗谓「人为名累」,其实,再忙再苦,我也不累,人情难却才是累人最甚。所谓「鱼与熊掌不能兼得」,我还是欢喜忙,所以仍然继续地忙下去。 随着佛教的发展,五十岁以后,我又忙出另一片天地。在建寺安僧、办理学院、成立养老育幼事业、从事出版文化工作等方面,我都写下了「忙」的历史。但有谁知道,我常常为了开导一个顽皮的小孩,忙着想尽办法;我往往为了疏通一位固执的老人,忙得舌干唇燥。时间在忙碌地思考,忙碌地做事中飞逝而过。佛经上说:「常做佛事,永不休息。」在忙碌的度众工作中,我学习到谦虚耐烦的美德,也长养了慈悲包容的雅量,真是人生一大收获。 佛光山开山之初,我忙着带领弟子们披荆斩棘,启建山林;平日里,我忙着在全山扫除各地落叶;假日时,我忙着进厨房供应香客素斋;山洪爆发时,我忙着以身挡水,保卫道场,事后还要忙着做好水土保持工作;台风来袭,我忙着巡视各地,灾后还要忙着修补摇摇欲坠的草寮。经云:「一沙一世界,一叶一如来。」在「忙」的生活中,我对于这句话有很深的体会,因为佛光山的一沙一叶中,有我全部生命的虔诚供养。 近十年来,我的弘法脚步拓展到国际舞台。我曾六去印度朝圣,八赴欧洲弘法;我曾七往澳洲、纽西兰大洋洲地区巡视寺务,三到巴西、阿根廷等南美国家视察佛光山的别分院。为了将大乘佛法传入西方世界,我去过北美洲的美加一带三十次以上;为了每年为期三天的佛学讲座,香港地区我来往不下十五次。在马来西亚的莎亚南体育馆,我主持过八万人的集会;在印度的拉达克,我爬上海拔四千公尺的高地,向当地信众弘法。联合国大厦曾有我过往的足迹,印度总统府、泰国皇宫、美国白宫也留下我和各国领导人会谈的历史。中国的长江三峡,我曾亲炙过它的风采;世界的七大奇观,我也曾一一伫足观赏。在倥偬的弘法行程中,我浏览过莫斯科的红场风光;在繁忙的北欧之旅中,我见识到瑞典和平幸福的社会主义。走访得克萨斯州的美国太空总署,使我对尖端科技的成果有了进一步的了解;参观加利福尼亚州的环球影城,让我对声光化电的功用有了深一层的认知。我忙着做一个地球人,将欢喜遍撒十方世界,将自己融入万物之中,每天过着既充实又幸福的忙碌生活。 滚石不生苔,流水不生蠹。忙,才能发挥生命的力量;忙,才能使我们身心灵活起来。经云:「若行者之心数数懈废,譬如钻火,未热而息,虽欲得火,火难可得。」又说:「人所欲为,譬如穿池,凿之不止,必得泉水。」借着忙,将自己动员起来,才能一鼓作气,先驰得点。如果能善于忙碌,「忙」就是一帖人生康乐的最佳营养剂。
View Details星云大师语录
提起乐观的性格。 想通事理的原委。 放开闲情的愁绪。 没有疑虑的性格。 扩大积极的服务。 明朗坦白地处世。 呈现微笑的面孔。 散播欢喜的情怀。 做事可以失败, 但不能做人失败; 过去可以失败, 但不能未来失败。 凡事深思熟虑,有计划,则事半功倍; 凡事轻慢草率,没计划,则事倍功半。 “幸福配方” 每天说一些欢喜的话,激励自己不要悲伤。 每天做一些利人的事,激励自己融入群众。 每天谈一些益智的事,激励自己增长智慧。 每天审视圣者的慈像,激励自己增加内心的善美。 人生中,感动是一时的,感恩是一世的; 荣耀是一时的,影响是一世的; 委屈是一时的,成就是一世的。 相伴唠叨自有缘,唠叨半世意缠绵; 劝君休厌唠叨苦,宁愿唠叨到百年。 当对方无理时容忍。 当流言中伤时不理。 当别人受难时体恤。 当接受任务时奋起。 当不幸来临时勇敢。 要学习吃亏、退让、忍辱。要做到“心甘情愿”。 谨记惜福之法: 一、只字必惜,贵之根也。 二、粒米必珍,富之源也。 三、片言必谨,福之基也。 四、微命必护,寿之本也。 人生可以淡,但是不能无味。 例如不读书,言语无味;无味就是贫乏。 人生要像青橄榄,愈嚼愈有味, 淡中有味,才是真味。 人,要求获得别人的尊重,希望获得别人的恭维赞美,就是人情的定律。 人,希望获得食衣住行的富有,就是生活的定律; 人,莫不希望获得功名富贵,就是金钱的定律; 人,都希望获得健康长寿,就是人生自我的定律。 宇宙给每一个人的报酬—— 假如你欢笑,周遭的人也会跟着笑; 假如你悲愁,左右的人也会跟着愁; 假如你歌咏,旁边的人就会跟着唱; 假如你幽默,听到的人就会欢喜你; 假如你拥有戒定慧,温馨一定靠拢着你; 假如你追求真善美,朋友都会包围着你。
View Details开除员工的五个理由
本文作者Matthew Bellows,Yesware软件公司创始人。 我一辈子被开除过两次,深知被开后心情是非常不爽的。年轻的时候喜欢闯荡,第一次被开除觉得是对自我的释放,但是渐渐发现,这是对自己的不负责,顺带失业6个月。 现在我自己开了一家公司,要为团队的发展担忧。招聘,算是我最喜欢的一个环节,可以跟许多有能力的人交流,并邀请有识之士进入团队。当然,开除员工也在所难免,当员工与团队或者公司的发展无法保持同步之时,我们就会考虑开除他。 在我的公司,在开除员工之前,我们会从5个品质以及一个关键因素出发对员工进行分析,最后得出是否开除的决定。 这五个品质是开除员工之前首先要考虑的不分,如果员工已经缺少了其中几个或者全部品质,我们会以最可气最尊重的方式将其“请出公司”: 1.高效率:公司不是一个大家庭,而是一个高效率的团队。每个企业都想研发出世界级的产品,这就需要所有员工都能保持高效率。如果员工做不到这一点,照Netflix首席执行官Reed Hastings的话说就是:“赶紧地,打包走人。” 2.积极性:所有进入公司的员工工作之初都是非常积极的,但因为产品研发需要一定的周期,这可能会抹杀许多人的积极性,但是这种积极性需要维持下去或者 得到提升。同时也需要勇气。如果我们发现员工没有了积极性,工作不再积极,我们就会考虑换人。当然我们更欣赏那些工作积极,充满热情的员工。 3.成长:对于一个快速发展的企业来说,改变是不可避免的,所以就要求提高适应变化的能力,提高技术水平。在我的企业中,我非常看重员工在经过一段时间的工作之后能不能得到成长,如果没法成长,抱歉! 4.诚实与自律:这两点是做人的基本原则,如果员工连诚实、自律都做不到,除了祸害团队其他成员,我还找不出别的功能。公司尊重员工,员工也应该尊重企业。 5.宽容:在一个快速发展的企业中,员工都处在高压状态下。企业工作多,客户需求也多。即便有压力,我们要对自己宽容,也要对客户宽容。宽容的意义还要更宽,比如不歧视,无性别和种族主义,不侮辱他人等。 所以说,如果有员工出现了不符合以上品质的情况,我们开除他的几率就会变得非常大。但是在任何一家公司,不能说开除就开除,得有一个正式的理由,我个人认为最有用的也是最关键的就是“企业资金预算不够”。 另外对于一家企业来说,开除人也就意味着要继续招聘人,不能让零和游戏出现负数。另外也要在用人过程中严禁出现“员工排序”的情况,因为这种制度已经导致微软等大企业停滞不前。 开除员工,并不是一个轻松的话题,对于员工和企业来说都非常重要。任何加入创业企业的员工都要清楚地认清他们未来几年的工作状况,创业者也要对他们所处 的和所打造的环境诚实、负责。在不符合公司发展规划的员工没有打乱这个环境之前,最好还是以相互尊重的方式将其“开除”。 转自:http://www.oschina.net/news/34457/dismissed-employees-reasons
View Details不容错过的 window8 metro UI 风格的 web 资源
最近微软已经正式发布了windows 8操作系统,window操作系统的风格已经完全改变成了瓦片状的Metro UI。 对于微软来说这是一个巨大的改变,而且所有微软的平台包括,桌面,平板,移动及其网站都使用这个UI风格。 Metro UI包含了所有的现代web设计的特点,包括了,简化,基于网格的界面,并且富有连续性。 大家如果有兴趣可以看看这个界面设计说明 (http://msdn.microsoft.com/en-us/library/windows/apps/hh465424.aspx)。 如果你也喜欢Metro风格的话,这里我们收集了很多windows 8的Metro UI风格布局资源,希望大家喜欢! Metro风格的网站框架和模板 Metro UI CSS Metro UI CSS是一个非常完整的创建Metro风格的网站的框架。使用LESS创建,并且拥有网格系统,排版样式,表格,按钮和图片。 同时也拥有内建的javascript组件,帮助你生成片状,菜单,边栏,进度条,提示等等 etro UI CSS BootMetro BootMetro是一个Twitter Bootstrap的Metro风格主题。你可以创建Metro风格的样式。例如,片状UI,工具栏,其它组件。 metro-bootstrap 类似上面的BootMetro,这是另外一个Twitter Bootstrap主题,拥有所有的漂亮组件,并且包含了LESS。 Metro UI Template 这是一个网站的框架和模板,用来创建windows 8 Metro UI风格的界面。拥有平滑的过渡效果和tiles(包括,RSS,Twitter,weather等等) 这个模板支持模板并且拥有jQuery UI主题。 Droptiles – Metro-Style Web Dashboard 一个开源的windows 8开始界面dashboard(类似igoogle)。 使用tiles来展示信息,每一个tiles是独立的应用可以用来获取数据。这个项目基于ASP.NET可以移植到其它语言。 PHP Image Gallery In Metro UI 一个PHP的图片画廊可以自动生成缩略图,并且可以使用lightbox来显示图片。支持HTML5和CSS3。 Motown 一个用来创建Metro风格应用的类库,使用很少代码即可实现。不依赖其它javascript类库。 Metro风格jQuery插件资源 jq-metro 一个jQuery插件用来创建Metro风格的界面。目前,panorama,privot,进度条,列表选择,切换,按钮等。 Metro JS 这个jQuery Metro UI插件可以用来创建tiles,应用条,并且支持主题。功能和设计完全可定制。 jQuery Metro UI Plugin 这个插件可以简单的创建tiles视图并且支持聚焦。 jQuery Mobile Metro Theme 一个免费jQuery移动Metro UI主题,完全支持自定义。使用不同插件来处理应用栏,进度条,按钮和日期选择器。 Metro UI Theme Builder For jQuery UI 拥有themeroller风格的jQuery UI主题创建,帮助你创建Metro UI风格样式 TileJS (non-jQuery) 一个标准的javascript代码来创建tiles并且拥有完整tiles的onclick效果。 免费Metro UI图标 Modern UI Icons 一套简单手绘的Metro […]
View DetailsWPF:在异步操作中使用CommandManager手动更新Command执行状态(转载)
WPF判断命令(Command)是否能够执行是通过ICommand.CanExecute事件,在实际程序中路由命令一般是通过CommandBinding来使命令得到实际操作代码,但是这个CanExecute事件的调用是由WPF控制的,有些时候,比如命令执行后进行一些异步耗时操作,操作完成后会影响CanExecute事件结果,但是WPF不会立即做出反应,那么这个时侯就需要手动调用CommandManager.InvalidateRequerySuggested对命令系统进行一次刷新。 比如下面这个小程序 <Window.CommandBindings> <CommandBinding Command="New" CanExecute="CommandBinding_CanExecute" Executed="CommandBinding_Executed" /> </Window.CommandBindings> <StackPanel> <Button Command="New">执行工作</Button> <TextBlock Name="tbl" Text="等待执行"></TextBlock> </StackPanel> // // 事件执行代码 // privatevoid CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e) { e.CanExecute =!finished; } privatevoid CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) { System.Threading.ThreadPool.QueueUserWorkItem(dowork); } bool finished =false; void dowork(object obj) { updateUI("开始工作"); System.Threading.Thread.Sleep(1000); updateUI("工作结束"); finished =true; } void updateUI(string msg) { Dispatcher.BeginInvoke((Action)(() => tbl.Text = msg)); } 程序按钮点击后下面文字显示“工作结束”,这时按钮理应是禁用的(因为此时CanExecute结果是false),但实际上按钮没有被禁用,只有界面发生改变后(如焦点,按键变化,或者按钮再次被点击),按钮才会被禁用,因为此时WPF才调用相应的CanExecute事件。 手动调用CommandManager.InvalidateRequerySuggested就可以解决问题,注意这个函数只有在UI主线程下调用才会起作用。 void dowork(object obj) { updateUI("开始工作"); System.Threading.Thread.Sleep(1000); updateUI("工作结束"); finished =true; //手动更新 updateCommand(); } void updateCommand() { Dispatcher.BeginInvoke((Action)(() […]
View DetailsWPF Timer替代者
做过WinForm开发的都会郁闷WPF竟然没有Timer。 今天想在WPF中用Timer可是发现WPF没有Timer类,找了半天发现新增了一个 DispatcherTimer确实好用和WinForm中Timer用法相似。 —————————————————————————————————————————-- 引:银光中国 在 WPF 中不再有类似 WinForm 中的 Timer 控件,因此,需要使用 DispatcherTimer 类来实现类似 Timer 的定时执行事件,该事件使用委托方式实现。DispatcherTimer 类 在 System.Windows.Threading 下,需要 using System.Windows.Threading 命名空间。 MSDN事例: 创建了名为 dispatcherTimer 的 DispatcherTimer 对象。 事件处理程序 dispatcherTimer_Tick 被添加到 dispatcherTimer 的 Tick 事件中。 使用 TimeSpan 对象将 Interval 设置为 1 秒,并启动了计时器。
|
1 |
<ol class="dp-c"><li class="alt"><span><span class="comment">// DispatcherTimer setup</span><span> </span></span></li><li><span>dispatcherTimer = <span class="keyword">new</span><span> System.Windows.Threading.DispatcherTimer(); </span></span></li><li class="alt"><span>dispatcherTimer.Tick += <span class="keyword">new</span><span> EventHandler(dispatcherTimer_Tick); </span></span></li><li><span>dispatcherTimer.Interval = <span class="keyword">new</span><span> TimeSpan(0,0,1); </span></span></li><li class="alt"><span>dispatcherTimer.Start(); </span></li></ol> |
Tick 事件处理程序将更新显示当前秒数的 Label,并且它将对 CommandManager 调用 InvalidateRequerySuggested。
|
1 |
<ol class="dp-c"><li class="alt"><span><span class="comment">// System.Windows.Threading.DispatcherTimer.Tick handler</span><span> </span></span></li><li><span> <span class="comment">//</span><span> </span></span></li><li class="alt"><span> <span class="comment">// Updates the current seconds display and calls</span><span> </span></span></li><li><span> <span class="comment">// InvalidateRequerySuggested on the CommandManager to force </span><span> </span></span></li><li class="alt"><span> <span class="comment">// the Command to raise the CanExecuteChanged event.</span><span> </span></span></li><li><span> <span class="keyword">private</span><span> </span><span class="keyword">void</span><span> dispatcherTimer_Tick(</span><span class="keyword">object</span><span> sender, EventArgs e) </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="comment">// Updating the Label which displays the current second</span><span> </span></span></li><li class="alt"><span> lblSeconds.Content = DateTime.Now.Second; </span></li><li><span> </span></li><li class="alt"><span> <span class="comment">// Forcing the CommandManager to raise the RequerySuggested event</span><span> </span></span></li><li><span> CommandManager.InvalidateRequerySuggested(); </span></li><li class="alt"><span> } </span></li></ol> |
转自:http://www.cnblogs.com/midcn/archive/2011/03/18/1987928.html
View DetailsC#操作注册服务卸载服务启动服务停止服务
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 |
using System; using System.Configuration.Install; using System.Collections; using System.Collections.Specialized; IDictionary stateSaver = new Hashtable(); 一、安装服务: private void InstallService(IDictionary stateSaver, string filepath) { try { System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController("ServiceName"); if(!ServiceIsExisted("ServiceName")) { //Install Service AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path =filepath; myAssemblyInstaller.Install(stateSaver); myAssemblyInstaller.Commit(stateSaver); myAssemblyInstaller.Dispose(); //--Start Service service.Start(); } else { if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending) { service.Start(); } } } catch (Exception ex) { throw new Exception("installServiceError\n" + ex.Message); } } 或者 /// <summary> /// 安装服务 /// </summary> /// <param name="p_Path">指定服务文件路径</param> /// <param name="p_ServiceName">返回安装完成后的服务名</param> /// <returns>安装信息 正确安装返回""</returns> public static string InsertService(string p_Path, ref string p_ServiceName) { if (!File.Exists(p_Path)) return "文件不存在!"; p_ServiceName = ""; FileInfo _InsertFile = new FileInfo(p_Path); IDictionary _SavedState = new Hashtable(); try { //加载一个程序集,并运行其中的所有安装程序。 AssemblyInstaller _AssemblyInstaller = new AssemblyInstaller(p_Path, new string[] { "/LogFile=" + _InsertFile.DirectoryName + "\\" + _InsertFile.Name.Substring(0, _InsertFile.Name.Length - _InsertFile.Extension.Length) + ".log" }); _AssemblyInstaller.UseNewContext = true; _AssemblyInstaller.Install(_SavedState); _AssemblyInstaller.Commit(_SavedState); Type[] _TypeList = _AssemblyInstaller.Assembly.GetTypes();//获取安装程序集类型集合 for (int i = 0; i != _TypeList.Length; i++) { if (_TypeList[i].BaseType.FullName == "System.Configuration.Install.Installer") { //找到System.Configuration.Install.Installer 类型 object _InsertObject = System.Activator.CreateInstance(_TypeList[i]);//创建类型实列 FieldInfo[] _FieldList = _TypeList[i].GetFields(BindingFlags.NonPublic | BindingFlags.Instance); for (int z = 0; z != _FieldList.Length; z++) { if (_FieldList[z].FieldType.FullName == "System.ServiceProcess.ServiceInstaller") { object _ServiceInsert = _FieldList[z].GetValue(_InsertObject); if (_ServiceInsert != null) { p_ServiceName = ((ServiceInstaller)_ServiceInsert).ServiceName; return ""; } } } } } return ""; } catch (Exception ex) { return ex.Message; } } 二、卸载windows服务: private void UnInstallService(string filepath) { try { if (ServiceIsExisted("ServiceName")) { //UnInstall Service AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path = filepath; myAssemblyInstaller.Uninstall(null); myAssemblyInstaller.Dispose(); } } catch (Exception ex) { throw new Exception("unInstallServiceError\n" + ex.Message); } } 三、判断window服务是否存在: private bool ServiceIsExisted(string serviceName) { ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController s in services) { if (s.ServiceName == serviceName) { return true; } } return false; } 四、启动服务: private void StartService(string serviceName) { if (ServiceIsExisted(serviceName)) { System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName); if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending) { service.Start(); for (int i = 0; i < 60; i++) { service.Refresh(); System.Threading.Thread.Sleep(1000); if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running) { break; } if (i == 59) { throw new Exception(startServiceError.Replace("$s$", serviceName)); } } } } } 另外方法 /// <summary> /// 启动服务 /// </summary> /// <param name="serviceName"></param> /// <returns></returns> public static bool ServiceStart(string serviceName) { try { ServiceController service = new ServiceController(serviceName); if (service.Status == ServiceControllerStatus.Running) { return true; } else { TimeSpan timeout = TimeSpan.FromMilliseconds(1000 * 10); service.Start(); service.WaitForStatus(ServiceControllerStatus.Running, timeout); } } catch { return false; } return true; } 五、停止服务: private void StopService(string serviceName) { if (ServiceIsExisted(serviceName)) { System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName); if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running) { service.Stop(); for (int i = 0; i < 60; i++) { service.Refresh(); System.Threading.Thread.Sleep(1000); if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped) { break; } if (i == 59) { throw new Exception(stopServiceError.Replace("$s$", serviceName)); } } } } } 另外一方法: /// <summary> /// 停止服务 /// </summary> /// <param name="serviseName"></param> /// <returns></returns> public static bool ServiceStop(string serviseName) { try { ServiceController service = new ServiceController(serviseName); if (service.Status == ServiceControllerStatus.Stopped) { return true; } else { TimeSpan timeout = TimeSpan.FromMilliseconds(1000 * 10); service.Stop(); service.WaitForStatus(ServiceControllerStatus.Running, timeout); } } catch { return false; } return true; } 六 修改服务的启动项 /// <summary> /// 修改服务的启动项 2为自动,3为手动 /// </summary> /// <param name="startType"></param> /// <param name="serviceName"></param> /// <returns></returns> public static bool ChangeServiceStartType(int startType, string serviceName) { try { RegistryKey regist = Registry.LocalMachine; RegistryKey sysReg = regist.OpenSubKey("SYSTEM"); RegistryKey currentControlSet = sysReg.OpenSubKey("CurrentControlSet"); RegistryKey services = currentControlSet.OpenSubKey("Services"); RegistryKey servicesName = services.OpenSubKey(serviceName, true); servicesName.SetValue("Start", startType); } catch (Exception ex) { return false; } return true; } 七 获取服务启动类型 /// <summary> /// 获取服务启动类型 2为自动 3为手动 4 为禁用 /// </summary> /// <param name="serviceName"></param> /// <returns></returns> public static string GetServiceStartType(string serviceName) { try { RegistryKey regist = Registry.LocalMachine; RegistryKey sysReg = regist.OpenSubKey("SYSTEM"); RegistryKey currentControlSet = sysReg.OpenSubKey("CurrentControlSet"); RegistryKey services = currentControlSet.OpenSubKey("Services"); RegistryKey servicesName = services.OpenSubKey(serviceName, true); return servicesName.GetValue("Start").ToString(); } catch (Exception ex) { return string.Empty; } } 八 验证服务是否启动 服务是否存在 /// <summary> /// 验证服务是否启动 /// </summary> /// <returns></returns> public static bool ServiceIsRunning(string serviceName) { ServiceController service = new ServiceController(serviceName); if (service.Status == ServiceControllerStatus.Running) { return true; } else { return false; } } /// <summary> /// 服务是否存在 /// </summary> /// <param name="serviceName"></param> /// <returns></returns> public static bool ServiceExist(string serviceName) { try { string m_ServiceName = serviceName; ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController s in services) { if (s.ServiceName.ToLower() == m_ServiceName.ToLower()) { return true; } } return false; } catch (Exception ex) { return false; } } 注:手动安装window服务的方法: 在“Visual Studio 2005 命令提示”窗口中,运行: 安装服务:installutil servicepath 卸除服务:installutil /u servicepath |
View Details
分享一个QQ关闭窗口的代码
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title> New Document </title> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <script> function QqClose() { window.opener = null; window.open('', '_top'); window.top.close(); window.close(); } </script> <a href="javascript:window.close();void(0);">正常关闭</a> <a href="javascript:QqClose();void(0);">QQ关闭</a> </body> </html> |
View Details
线程间操作无效: 从不是创建控件“label1”的线程访问它
Thread thread=null; //定义线程 //开始线程 private void button1_Click(object sender, EventArgs e) { thread = new Thread(new ThreadStart(StartThread)); thread.Start();//开始线程 } private void StartThread() { int i = 0; while (true) { this.label1.Text = i.ToString(); //此处报错 i++; } } //结束线程 private void button4_Click(object sender, EventArgs e) { thread.Abort(); } 问题:当我们运行的时候会出现错误:"线程间操作无效: 从不是创建控件“label1”的线程访问它。" 解决方案:在程序运行的时候增加一句话,如下: public Form1() {InitializeComponent();Control.CheckForIllegalCrossThreadCalls = false; //这是增加的一句话 } 缺点:将UI传给了子线程,违背了弱耦合、封装的思想。子线程去更新UI的状态,如果有多个不同主线程要获取子线程状态,怎么办?
View DetailsJS中操作table的方法
JS中操作table的方法 var myTable = document.getElementById("myTable "); //添加行 var newTR = myTable.insertRow(index); 该方法创建一个新的 TableRow 对象表示一个新的 <tr> 标记,并把它插入表中的指定位置。 新行将被插入 index 所在行之前。若 index 等于表中的行数,则新行将被附加到表的末尾。 如果表是空的,则新行将被插入到一个新的 <tbody> 段,该段自身会被插入表中。 //设置行的id和class属性 newTR.id = "myid"; newTR.className="MainContentText"; //添加列:序号 var newTD=newTR.insertCell(0); //添加列内容 newTD.innerHTML = "dfdsf"; //删除表所有行,只留标题行 var rows = myTable.rows.length; for(var i=0;i<rows-1;i++){ myTable.deleteRow();//不给参数,代表删除最后一行 } JS本身不支持方法重载 Js中实现方法重载的方式也知道了呵呵(会默认调用参数最多的那个方法) 转自:http://www.cnblogs.com/judy/archive/2010/06/05/1752230.html
View Details