【问题标题】:What makes my program work with a delay on windows startup?是什么让我的程序在 Windows 启动时延迟工作?
【发布时间】:2011-10-24 21:03:25
【问题描述】:

我的程序从 Windows 启动开始,
但是后台工作人员应该在程序打开后立即工作。
但它以延迟开始,然后甚至返回错误的迹象(如果站点启动,它会返回),
只有大约 15 秒后,后台工作人员才能继续正常工作,程序也继续正常工作。我认为这是因为 .net 框架试图加载,或者 Internet 连接尚未启动,或者尚未加载(Windows 启动)。
什么可以解决这个问题,可能的原因是什么? (WinForm C#)

编辑:
这是我想到的,
我不认为这是一个好习惯。有没有更好的办法?
(加载方式):

    while (!netConnection())
    {
    }
    if(netConnection())
    bwCheck.RunWorkerAsync();

【问题讨论】:

  • 嗯,这取决于,有什么例外?异常几乎肯定会告诉您问题所在!
  • @KierenJohnstone,我也不例外。但只是一个普遍的问题。

标签: c# backgroundworker startup


【解决方案1】:

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

不。如果是这种情况,您的程序将无法运行。

或尚未建立的互联网连接,或

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

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

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

编辑:正如 SLaks 在 cmets 中指出的那样,这在 C# 中非常简单:The NetworkAvailabilityChanged event 为您带来编程乐趣。

【讨论】:

  • 我该如何解决这个问题?检查互联网连接是否正常-> 然后只启动 bg-worker?
  • @agam360:我添加了更多信息,必须做一次完全相同的事情。希望对您有所帮助。
  • SLaks:我的项目是用 C 语言编写的,甚至没有意识到它在 C# 中会变得如此琐碎。谢谢。
  • @agam360:发布了一个链接到应该让你去的文档。
  • @agam:坐在循环中等待也不错,但是您应该做两件事。 1.在循环中添加Sleep,以便您的程序放弃CPU时间并且不挂钩机器,以及2.添加一些中断条件。你不想永远循环。如果网络永远不会出现,您应该记录它并做...一些事情,但不要只是无限等待。您是否尝试使用 NetworkAvailabilityChanged 事件?你仍然需要循环等待,但我不确定netConnection() 来自哪里。
【解决方案2】:

这绝对是因为一切仍在启动。登录后很长时间内服务仍然可以联机,您看到的快速登录对话框是 Windows 中的优化,可让您在其他一切仍启动时登录。

注意 How to detect working internet connection in C#? 特别是一种避免环回适配器的技术:

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()

【讨论】:

  • NetworkInterface.GetIsNetworkAvailable(),似乎不起作用,它一直返回 true...(即使我关闭了我的 adsl 适配器+调制解调器)。
  • 通过关闭 - 您的网络接口仍然启动吗?如果是这样,无论另一端是否有东西,网络都是“可用的”。请注意,您可能必须 ping 例如,google 才能确定这一点。请参阅:channel9.msdn.com/coding4fun/articles/…
  • 我认为 ping Google 似乎是一种非常糟糕的做法,尽管 Google 失败的可能性为 0 或接近它。还有什么办法吗?
  • Ping 您自己的其他提供商。否则你怎么知道你真的在网上?你没有。如果是 dhcp,您可以在发生地址更改事件时收到通知,这将告诉您您可能已经在机器外部进行了通信。
猜你喜欢
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 2010-12-15
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
相关资源
最近更新 更多