C# 如何知道winform启动所需时间是否超过5秒?

C# 如何知道winform启动所需时间是否超过5秒?,c#,.net,multithreading,winforms,process,C#,.net,Multithreading,Winforms,Process,我有一种情况,我必须使用c#-Winform中的编码创建一些机制,这样当我启动任何特定的Winform时,如果启动所需的时间超过指定的秒数(比如10秒),那么我必须显示一个加载程序(ajax加载程序类型的东西),直到我无法完全获得表单显示。(这个表单需要很多时间,因为它在大量计算后显示数据,所以我希望同时显示一些加载器) 我成功地设计了圆形装载机。现在的问题是: (1.)如何知道表单启动时间是否超过10秒?所以我启动了加载器 (2.)另一个问题是,我必须让它在所有表单上通用(因为项目非常大,所以

我有一种情况,我必须使用c#-Winform中的编码创建一些机制,这样当我启动任何特定的Winform时,如果启动所需的时间超过指定的秒数(比如10秒),那么我必须显示一个加载程序(ajax加载程序类型的东西),直到我无法完全获得表单显示。(这个表单需要很多时间,因为它在大量计算后显示数据,所以我希望同时显示一些加载器)

我成功地设计了圆形装载机
。现在的问题是:

(1.)如何知道表单启动时间是否超过10秒?所以我启动了加载器

(2.)另一个问题是,我必须让它在所有表单上通用(因为项目非常大,所以我不想为每个表单编写加载程序代码,我想知道全局实现此功能的方法,如果当前启动的表单需要10秒以上的时间,那么它将显示加载程序(如果表单在启动时需要10秒以上的时间,并且没有写出要在每个表单上显示的代码,则应适用于所有表单),并在表单出现时停止加载程序


如何实现这两项功能?

只有在后台线程中处理数据时,才能执行此操作,否则表单将被阻止,您无法进行任何更改

因此,如果它在单独的线程中执行工作,请尝试以下操作:

  • 创建一个基类并实现

  • a、 写一个名为DataLoaded之类的标志
  • b、 编写一个名为OutOfTime的标志
  • c、 动态创建要显示的加载程序所需的控件
  • 在基类中使用一个计时器(有3个不同的计时器,请明智地选择),并在X秒内调用一个方法
  • 加载数据时,如果!OutOfTime set DataLoaded=true,则关闭/隐藏加载程序,以防在下一步中显示该加载程序
  • 当调用计时器的事件/方法时,检查是否加载了数据,如果未加载,则意味着在X秒内他们仍在处理,因此显示/调用/显示加载程序

  • 只是一个想法,一开始可能行不通,但这或多或少是我会做的:)

    为什么要等待10秒?如果所用时间是10.5秒呢。作为一个用户,我一直在等待表单完成,但只等待了0.5秒。我得到一个指示,表明这需要一段时间。你不能根据需要进行的计算数量显示加载程序吗?另外,在构造函数中,繁重的工作在哪里完成?OnLoad?请显示so代码和你已经完成的内容到目前为止(计时器?)我不知道你为什么要这么麻烦。标准的习惯用法是显示忙碌的光标。你肯定已经看到了。你只需在加载操作之前显示它,加载完成后,忙碌的光标就会自动消失。或者,你可以只显示你的小加载动画,执行任务,然后删除加载动画当它完成的时候,我会很兴奋。尝试编写时间检测代码是不值得的。@CodyGray我不允许对每个表单进行编码……因为这个项目非常大。有什么解决方案可以全局实现它,而不是为loader对每个表单进行编码吗?@user3085082是从基本表单派生出来的表单,如果是的话,您可以做一些这样的工作e magic在那里。否则我看不出怎么做。如果项目的规模让人们不允许你做改进,你显然有更大的顾虑。是的,有一个主winform,它在菜单中有各种子菜单。在每个菜单上单击,我们都有一个子表单启动,它进行计算。那么如何在这个主窗口f上实现这种魔力呢orm?问题是..如何知道是否加载了数据?(我的意思是如果设置了10秒,何时停止加载程序。也就是说,我知道何时启动加载程序(当表单在10秒内未加载时)但如何知道表单是否已加载?True xD我知道这太简单了C:抱歉,错误地单击了enter。您是如何获取数据的?您使用的是哪种框架?请提供更多详细信息。您有多少表单?这可能是一个简单的解决方案,只需在每个表单上调用一个小this.DoneLoading()。感谢您的回复。(1)我有一个主窗口窗体。它有几个菜单,在各自的点击下给出单独的窗体(Form1 frm1=new Form1();frm.showdialog();然后此表单在从用户处获取一些数据进行计算后,会进一步弹出另一个表单,并通过弹出第三个表单在OK按钮上显示计算结果,我会在点击OK按钮时进行复杂的数学计算,这需要时间,表单很晚才会弹出)像这样的表单有100种,所以我的老板想要一个全局解决方案,而不是在每个表单后面编码。我使用的是.NET 4.5。你没有回答这个问题:计算是在同一个线程中完成的吗?如果它们在不同的线程中,那么问题是,正如你之前所说的,没有简单的方法知道数据何时完成如果计算/数据检索是手动完成的,并且硬编码到每个表单中,那么除了硬编码this.DoneLoading()之外,您别无选择。这是最好的方法,因为你可以打开多个表单,这可能会导致bug。它在同一个线程中…但对于加载,我想我们需要创建另一个线程