确定应用程序是否阻塞/繁忙

本文关键字:繁忙 是否 应用程序 | 更新日期: 2023-09-27 18:02:09

我正在尝试使用c#/自动化外部应用程序的GUI。NET 4.0

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

在执行操作或单击按钮时,AUT有时会花费大量时间等待DB响应。当应用程序在等待DB结果时,应用程序本身是空闲的(没有注册太多的CPU使用),但它被阻塞了(你不能点击或与它交互)。

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

-我已经尝试查看AUT的TotalProcessorTime主进程(这衡量应用程序是IDLE还是BUSY),但就像我说的,有时应用程序是IDLE的,仍然被阻塞。

所以我想带进stackOverflow人群的经验,看看是否有人已经知道如何处理,和/或如果你有任何想法如何实现这一点。

感谢编辑:

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

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

所以我猜他们是故意阻止应用程序,而使DB调用。

确定应用程序是否阻塞/繁忙

您可以检查该应用程序的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)
{ 
    //
}

Edit:您可以修改application.Responding使用的超时时间检查此