确定应用程序是否被阻止/忙碌?

我试图使用C#/ .NET 4.0自动化外部应用程序的GUI

正在自动化的应用程序(AUT)是一个VB6应用程序。

在做某个动作或点击一个按钮时,AUT有时会花费很多时间等待数据库响应。 当应用程序正在等待数据库结果时,应用程序本身是空闲的(不会注册太多CPU使用率),但它被阻止(您不能单击或与其交互)。

到目前为止,我已经尝试将鼠标指针(沙漏)作为指标,但有时应用程序被阻止,但光标正常。 所以这是不可靠的。

- 我曾试着查看过TotalProcessorTime的AUT的主进程(这个措施是否应用程序是IDLE或BUSY),但就像我说的,有时候应用程序是空闲的,仍然被阻塞。

因此,我想将StackOverflow的用户体验记录下来,看看是否有人已经知道如何处理这个问题,并且/或者如果您对如何实现这一点有任何想法。

谢谢

编辑:

我一直在玩,并且发现了一些东西。

AUT被阻止时,它不响应键盘或鼠标输入。 但是,如果我将WM_LBUTTONCLICK消息发送到窗口,我可以确认消息正在处理(以及UI更改)。

所以我猜测他们有意在阻止应用程序的同时进行数据库调用。


您可以检查该应用程序的UI是否正在响应:

获取该应用程序的流程实例并检查其Responding属性。 喜欢:

//To get the process instance
Process  application = null;
foreach (var process in Process.GetProcesses())
{
    if (process.ProcessName == "The Process Name")
    {
        application = process;
        break;
    }
}

//to check if the process UI is not responding
if (application.Responding)
{ 
    //
}

编辑:你可以修改application.Responding使用的超时。 application.Responding检查这一点。

链接地址: http://www.djcxy.com/p/8457.html

上一篇: Determine if an application is blocked/busy?

下一篇: Slow flash cs5 compilation