首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Windows服务:OnStart循环 - 我需要委托吗?

在Windows服务中,OnStart方法是服务启动时调用的方法。通常情况下,OnStart方法应该是非阻塞的,这意味着它应该在很短的时间内完成,以便Windows服务管理器可以确认服务已经启动。如果OnStart方法中有循环,它可能会导致服务启动过程被阻塞,从而导致服务无法启动。

因此,如果您需要在OnStart方法中执行循环,则应该使用其他线程或异步方法来执行循环,以便OnStart方法可以快速返回。在这种情况下,您需要使用委托来将控制权转移给其他线程或异步方法。

以下是一个使用委托在OnStart方法中执行循环的示例:

代码语言:csharp
复制
protected override void OnStart(string[] args)
{
    Task.Run(() =>
    {
        while (true)
        {
            // 执行您的循环操作
        }
    });
}

在这个示例中,Task.Run方法将在其他线程上运行循环,从而允许OnStart方法快速返回。

请注意,在使用委托时,您需要确保在服务停止时正确地停止循环。您可以使用OnStop方法来执行此操作。

总之,如果您需要在OnStart方法中执行循环,则需要使用委托将控制权转移给其他线程或异步方法,以便OnStart方法可以快速返回。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Windows 服务器怎么修改密码和用户名?服务器修改密码需要重启

今天和大家分享一下Windows服务器修改用户名和密码的方法。...方法一:服务器管理器Windows Server 2003、20081、远程登录服务器,右击“的电脑”——点击“管理”,如下图2、找到“配置”“本地用户和组”——点击“用户”,点击要修改的用户名——右键...设置密码”和“重命名”操作5、如果是你要修改密码,点击“设置密码”后会弹出对话框,单击“继续”,两次输入新密码,后点击“确定”即可建议密码包括英文大小写、数字和符号,会更安全哦~密码设置好后下次登录就需要用新密码登录了...修改成功后是不需要重启服务器的,下次登录会提示你输入新密码和用户名。...以上便是Windows服务器修改密码和用户名的方法。感谢您的阅读,服务器大本营助您成为更专业的服务器管理员!

2K10
  • 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity

    答:不,放弃是不可能的,丢了Android,你会心疼?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦的,有人说,喜欢一个人是幸福的。...答:初始Android,各种UI组件,布局管理器,单元Activity,从基础到基础,从放弃到努力,现在技术发展太快,Android市场需要的是技术人才,有着高能力者才更加有机会哦~ 问:嗯,那像我这样的女生有机会...答:Android呀,IOS呀,Windows Phone呀,Windows Phone呀,Linux呀等,需要了解就去学,知道就行~ Android入门就要知道学Android集成开发工具,Android...Studio哦;对于下载该工具,已经写好该教程了,点击《Android Studiod的下载详解》查看。...Activity是Android中最常见的四大组件之一,在中文中意思为活动,提供用户交互的可视化界面,能够提供用户的体验服务

    1.2K20

    《修炼之道:.NET 开发要点精讲》

    我们 还把 程序 中 获取 Windows 消息 的 结构 称之为 Windows 消息循环。...Windows 消息 循环 在 代码 中就 是一 个 循环 结构( 比如 while 循环), 它 不停 地 从 操作系统 中 获取 Windows 消息, 然后 交给 程序 去 处理。...8.2 Win32 应用程序的结构 > 位置 2895 在 Windows 中, 其实 将 消息 分成 了 两类, 一类 需要 存入 消息 队列, 然后 由 消息 循环 取出 来之 后才 能被 窗口 过程...最后 我们 再来 看一下 Windows Forms 中 消息 循环 的 结构图, 如图 8- 14 所示。...该 循环 不断 地 从 消息 队列 中 获取 Windows 消息, 最终 通过 调用 对应 的 窗口 过程, 将 Windows 消息 传递 给 窗口 过程 进行 处理。

    61120

    大话企业级android读书笔记(二)

    有三个嵌套的循环,你可以通过这七个方法监视: 活动的整个生命时间,从第一次调用onCreate()开始直到调用onDestroy()结束。...活动的可视生命时间,从调用onStart()到相应的调用onStop() 。在这期间,用户可以在屏幕上看见活动,虽然它可能不是运行在前台且与用户交互。在这两个方法之间,你可以保持显示活动所需要的资源。...下面这个图解释了这三个循环和状态之间状态的可能路径。着色的椭圆表示活动的主要状态,矩形表示当活动在状态之间转换时你可以执行的回调方法。 ?...  Bundle bundel = getIntent().getExtras();   user= (User) bundel.get("user"); 2.SharedPreferences 在...android的隐形管理员:Service Service从字面上理解即为“服务”,这里与windows中的服务有点类似。

    1K50

    防止Lambda的各种坑爹(二)

    代码会创建3个不同的委托—每次循环都会创建一个,添加到一个List集合中。现在,由于current变量是在循环内声明的,所以每次循环迭代。他都会被创建。...想你一定不奇怪为什么每次的current变量的值不同,因为这个看上次似乎是理所当然的。是这样?...同时可以看到new DisplayClass1的位置在循环内部   对应的C#代码想是这样的 View Code 1 using System; 2 using System.Collections.Generic...在这种情况下,所以的循环内的委托共享的是一个变量i。输出的将是3 4 5 6 7。之所以这样,是因为在循环结束时,i的值是3(同时要注意的是,委托内的i++不会现在执行)。...  好了,这个提醒我们以后在循环内部使用Lambda表达式的时候需要注意的地方。

    30940

    C# ThreadPool.QueueUserWorkItem典型案例详解

    大家好,又见面了,是你们的朋友全栈君。 今天在博客园拜读了 蒋金楠,难道调用ThreadPool.QueueUserWorkItem()的时候,真是必须调用Thread.Sleep(N)?...,首先大家都知道创建一个线程是需要时间的,线程池作为一个管理线程的对象操作简单,但是涉及到具体细节的时候却很难控制,其原理是当线程池收到请求以后,则从线程池中找到一个闲的线程分配给它,然后启动。...但是线程池的线程从创建到启动需要时间,但是主线程的循环显然只是瞬间完成,完全没必要夹杂在线程池的等待中,因此出现了主线程执行完循环最后是的线程池收到的请求委托是列表中的最后一个,如何解决?...大家知道线程池是有请求就为其分配一个自由线程与其工作,当每一次循环中的变量不同也就是对象不同时这时候每次请求出现差异,当然线程池必须为每一个做准备,不同于把循环变量直接作为请求,这时候每一个请求就按顺序依次准备好依次启动...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    83510

    invoke和begininvoke 区别——c#

    invoke例子中我们会发现invoke所提交的委托方法执行完成后,才能继续执行 DDD;在begininvoke例子中我们会发现begininvoke所提交的委托方法后,子线程讲继续执行DDD,不需要等待委托方法的完成...Windows GUI程序的消息循环 Windows程序有个消息队列,窗体上的所有消息是这个队列里面消息的最主要来源。...Invoke or BeginInvoke Invoke或者BeginInvoke方法都需要一个委托对象作为参数。...委托类似于回调函数的地址,因此调用者通过这两个方法就可以把需要调用的函数地址封送给界面线程。...通过windows消息机制实现了封送。而需要封送的委托方法作为消息的参数进行了传递。关于其它的代码这里不作进一步解释。

    2.6K41

    金九银十Android面试复习题集:关于四大组件中的Activity你了解多少?

    -> A.onResume onCreate 方法里写死循环会 ANR ?...ANR 的四种场景: Service TimeOut: service 未在规定时间执行完成:前台服务 20s,后台 200s BroadCastQueue TimeOut: 未在规定时间内未处理完广播...只不过死循环阻塞了主线程,如果系统再有上述的四种事件发生,就无法在相应的时间内处理从而触发 ANR。 onNewIntent是什么时候调用的?...如果需要启动的实例是之前有打开过的,并且在栈的顶部,目前处于onPause、onStop 的状态,其他实例再次进入的话,执行顺序为:onNewIntent,onRestart,onStart,onResume...虽然只想拧螺丝,但是我们却需要通过造火箭来找到拧螺丝的工作。 有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。

    1.4K00

    谈谈C#中各种线程的使用及注意项~

    线程也是程序,所以线程需要占用内存,线程越多占用内存也越多。 多线程需要协调和管理,所以 CPU 需要花时间来跟踪线程。...总结:   System.Threading.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务。不建议将其用于 Windows 窗体,因为其回调不在用户界面线程上进行。...中还是使用的这个而不是Threading.Timer,因为使用Threading.Timer时只执行了一次就不在执行了。...另外,定时器是ASP.NET进程,IIS有关,所以对用重要的执行任务,还是建议写成服务或独立程序放在服务器上执行好了。...它的主要缺点是计时不精确,而且必须有消息循环,Console Application(控制台应用程序)无法使用。

    1.9K10

    Android面试题集:以前烂大街的四大组件-Activity,面试重提这些知识点你还记得?

    -> A.onResume onCreate 方法里写死循环会 ANR ?...只不过死循环阻塞了主线程,如果系统再有上述的四种事件发生,就无法在相应的时间内处理从而触发 ANR。 onNewIntent是什么时候调用的?...如果需要启动的实例是之前有打开过的,并且在栈的顶部,目前处于onPause、onStop 的状态,其他实例再次进入的话,执行顺序为:onNewIntent,onRestart,onStart,onResume...另外,自己也珍藏了好几套视频,有需要也可以分享给你。 2、进行系统梳理知识,提升储备 客户端开发的知识点就那么多,面试问来问去还是那么点东西。...关于面试刷题,个人也准备了一套系统的面试题,帮助你举一反三: 总结 改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,

    73300

    运维实战:Windows服务挂掉了怎么办,通过Bat脚本实现自动重启

    这里给大家介绍通过Bat脚本的方式,实现异常Windows服务的重启,这样再也不用担心服务器因为应用服务挂掉,还需要火急火燎的处理问题了。当然前提是你的应用服务应该配置为Windows服务的方式启动。.... == . goto end :chkit set svrst=0 rem 使用for 循环遍历当前系统上正在运行的服务列表。...官网:http://www.nssm.cc/usage 3.2 Windows服务程序 将批处理脚本作为Windows服务运行的方法是编写一个简单的Windows服务程序,然后在该服务程序中调用批处理文件...你需要编写一个XML配置文件来指定批处理文件的位置和其他参数,然后用winsw.exe和配置文件一起创建服务。...使用命令行工具 sc 注册服务: 注意:这种方法还是间接地将批处理文件作为服务运行,而不是直接将批处理文件注册为服务正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

    2.4K20

    剥开比原看代码06:比原是如何把请求区块数据的信息发出去的

    那么首先我们需要弄清楚的是: 比原在什么情况下,会创建MConnection的对象并调用其OnStart方法?...这样我们就只需要分析前两种情况了。 比原节点启动时,是如何主动连接其它节点,并最终调用了MConnection.OnStart方法的?...然而在这里需要说明的是,经过的分析,发现这块代码实际上没有起到任何作用,因为在当前这个时刻,sw.peers总是空的,它里面还没有来得及被其它的代码添加进peer。...通过一个for循环,拿到连接到该端口的节点的连接,生成新peer。...是从sending? 其后的代码是把数据块对象变成二进制,放入到前面的bufWriter中发送。

    55730
    领券