处理响应冻结申请

时间:2018-03-28 16:19:53

标签: c# winforms visual-studio

我正在尝试检测进程是否正在响应,我正在使用System.Diagnostics进行此操作

但问题是,当进程没有响应我的表单冻结时,它应该显示消息框中带有“否”,但它只是冻结,而如果进程处于活动状态,则会显示“是”。

这是我到目前为止所做的:

private void timer1_Tick(object sender, EventArgs e)
{
    Process[] processes = Process.GetProcessesByName("Anticheat");

    foreach (Process p in processes)
    {
        if (p.Responding)
        {
            MessageBox.Show("Yes");
        }
        else
        {
            MessageBox.Show("No");
        }
    }
}

是的,我正在用一个每5秒运行一次的计时器来检查它。

1 个答案:

答案 0 :(得分:1)

解决方法是使用具有最大等待超时的任务来获取响应

    private void timer1_Tick(object sender, EventArgs e)
    {
        var processes = Process.GetProcessesByName("Anticheat");
        foreach (var p in processes)
        {

            var task = Task.Factory.StartNew(() => p.Responding);

            const int maxWaitForResponse = 1000; //ms
            var processResponding = task.Wait(maxWaitForResponse) && task.Result;

            MessageBox.Show(processResponding ? "Yes" : "No");
        }
    }