Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何知道控件正忙于执行窗口应用程序中的任何任务?_C#_Windows - Fatal编程技术网

C# 如何知道控件正忙于执行窗口应用程序中的任何任务?

C# 如何知道控件正忙于执行窗口应用程序中的任何任务?,c#,windows,C#,Windows,我正在用C#开发一个基于窗口的应用程序,并运行一个计时器,该计时器在主MDI父控件上运行,在主MDI父控件上打开/编辑/关闭许多子控件。现在,我想知道关于定时器的代码,整个应用程序是忙的还是空闲的。如果任何控件正在执行任何任务,如从数据库访问数据,或执行插入查询或删除数据等,那么我应该知道应用程序正忙,否则应用程序将处于空闲状态 提前谢谢 您应该将所有耗时的任务放在后台工作人员(BackgroundWorker)类中。因此,您可以连续监视、获取进度并在需要时退出,而不会对UI造成任何影响 这里是

我正在用C#开发一个基于窗口的应用程序,并运行一个计时器,该计时器在主MDI父控件上运行,在主MDI父控件上打开/编辑/关闭许多子控件。现在,我想知道关于定时器的代码,整个应用程序是忙的还是空闲的。如果任何控件正在执行任何任务,如从数据库访问数据,或执行插入查询或删除数据等,那么我应该知道应用程序正忙,否则应用程序将处于空闲状态


提前谢谢

您应该将所有耗时的任务放在后台工作人员(
BackgroundWorker
)类中。因此,您可以连续监视、获取进度并在需要时退出,而不会对UI造成任何影响

这里是示例应用程序的链接


< p>如果您使用Windows窗体计时器(<代码> Stury.Windows窗体。定时器< /代码>),则在UI线程忙时,不执行定时器代码(<代码>蜱< /COD>事件),除非有人在某物中间调用<代码> Apvest.doEvsServer()/<代码>。但是如果您有后台工作线程或其他类型的线程来执行某些任务,那么就没有明确的方法来知道其他线程正在忙着做一些事情

您应该使用一些机制来确保您的计时器事件不会弄乱某些东西。您还可以使用一些保护变量。最好考虑一些建筑修复。

编辑: 您不能在计时器中检查应用程序是否空闲。如果一个操作在计时器注意到之前的几分之一秒内开始并完成,该怎么办

最好的方法是使用一个全局
lastOperationTime
变量,并将其设置为
DateTime。现在,每次执行操作时都要使用
。然后使用计时器检查从
lastOperationTime
经过的时间:

void idleTimer_Tick (object sender, EventArgs e)
{
    if ((DateTime.Now - lastOperationTime).TotalMinutes > 50)
    {
        ...
    }
}

最困难的部分是如何在每个执行有用操作的方法中注入一行代码!如果您有一个具有正确组织基类的良好框架,那么可能有一些特定的(有限的)点,您应该将代码放入更新
lastOperationTime

您使用的是哪种计时器
System.Windows.Forms.Timer
System.Threading.Timer
System.Timers.Timer
?Hi@MD.Unicorn,我正在使用System.Windows.Forms.Timer,这里我想知道这一点,因为我已经实现了一个自动注销功能,如果应用程序在特定时间(如50分钟)空闲,则会闪烁一条警告消息,然后关闭所有打开的子控件。之后,它会显示用户登录窗口。