C# 什么使我的程序在windows启动时延迟工作?

C# 什么使我的程序在windows启动时延迟工作?,c#,backgroundworker,startup,C#,Backgroundworker,Startup,我的程序从windows启动开始, 但是后台工作人员应该在程序打开后立即工作。 但它从延迟开始,然后甚至返回错误信号(如果站点已启动,则返回), 只有在大约15秒后,后台工作人员才能继续正常工作,程序也可以正常运行。我认为这是因为.net framework正在尝试加载,或者internet连接尚未启动,或者某些东西尚未加载(windows启动)。 什么可以解决这个问题,可能的原因是什么?(WinForm C#) 编辑: 我想到了一件事, 我不认为这是一个好的做法。有更好的办法吗? (荷载法):

我的程序从windows启动开始,
但是后台工作人员应该在程序打开后立即工作。
但它从延迟开始,然后甚至返回错误信号(如果站点已启动,则返回),
只有在大约15秒后,后台工作人员才能继续正常工作,程序也可以正常运行。我认为这是因为.net framework正在尝试加载,或者internet连接尚未启动,或者某些东西尚未加载(windows启动)。
什么可以解决这个问题,可能的原因是什么?(WinForm C#)

编辑:
我想到了一件事,
我不认为这是一个好的做法。有更好的办法吗?
(荷载法):

我认为这是因为.net framework试图加载

没有。如果是这样,你的程序就不会运行了

或尚未启动的internet连接,或

是的。网卡/接口/连接/任何东西尚未初始化并连接到internet。你不能期望电脑在启动时立即连接到互联网。更重要的是,如果您的客户位于使用网络身份验证的域上,该怎么办?如果他们延迟网络通信直到某项任务完成(这实际上是我下面的案例中的问题,说真的)

在这种情况下,启动并运行它可能需要更长的时间(请阅读:不要添加
Thread.Sleep()
,徒劳地试图“修复”问题

我曾经在一次系统设计中解决过这样的问题,我们通过PC中的以太网总线与运动控制板进行通信。我最后添加了一些代码来监控网络连接的状态,直到网络连接建立后,才开始通过网卡与设备进行通信


编辑:正如SLaks在评论中指出的那样,这在C#:中非常简单,因为您的编程乐趣。

这完全是因为一切仍在启动。服务在您登录后很长一段时间内仍然可以联机,您看到的快速登录对话框是windows中的一个优化,它允许您在其他一切仍在启动的情况下登录。

注意到 特别是一种避免环回适配器的技术:

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()
System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()
我该如何解决这个问题呢?检查互联网连接是否正常->然后只启动bg worker?@agam360:我添加了更多信息,不得不做一次完全相同的事情。希望能有所帮助。SLaks:我的项目是用C编写的,甚至没有意识到用C编写会变得如此琐碎。谢谢。@agam360:发布了一个链接到应该让你开始的文档。@agam:没有坐在循环中等待是不好的,但有两件事你应该做。1.在循环中添加
睡眠
,这样你的程序就不会占用CPU时间,也不会挂起机器;2.添加一些中断条件。你不想永远循环。如果网络从未出现,你应该记录它并做一些事情,但不要无限期地等待嗯。您是否尝试使用NetworkAvailabilityChanged事件?您仍然需要太多的循环和等待,但我不确定netConnection()的位置
来自。好吧,这取决于,什么是异常?异常几乎肯定会告诉你问题出在哪里!@KierenJohnstone,我没有异常。但只是一个一般性问题。NetworkInterface.GetIsNetworkAvailable(),似乎不起作用,它总是返回真的…(即使我关闭我的adsl适配器+调制解调器)。通过关闭-您的网络接口是否仍处于打开状态?如果是这样,则无论另一端是否有东西,网络都是“可用的”。请注意,您可能需要ping,例如,google来确定这一点。请参阅:我认为ping google似乎是一种非常糟糕的做法,尽管google有0或接近0的可能会失败。还有其他方法吗?ping您的拥有其他提供商。否则,您如何知道自己实际在网络上?您不知道。如果是dhcp,当发生地址更改事件时,您可以收到通知,这将告诉您您已经在计算机外部进行了潜在通信。 System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()