Process.Responding真正意味着什么?

Ang*_*ker 9 c# .net-3.5 winforms

我正在炮轰做一些工作,其中一个要求就是如果它被挂起就杀了它.
我的第一个想法是Process.Responding,但是,我不确定它的真正含义.

是否与Win7 (Not Responding)在应用程序的窗口标题中添加a时相同?在我的机器上,即使MS Word尝试从非常慢的远程共享中打开文件,也会发生这种情况.

Process.Responding是假的有什么条件?

Dir*_*mar 16

在引擎盖下,当您检查Process.Responding属性时,将SendMessageTimeout调用Windows函数.

此函数基本上将消息发送到另一个进程的主窗口,并检查窗口是否在5000毫秒的超时内接受消息(因此在控制台应用程序上检查此属性无效).

如果你想使用自定义超时,你也可以SendMessageTimeout自己调用这个函数:

[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(
    HandleRef hWnd, 
    int msg, 
    IntPtr wParam, 
    IntPtr lParam, 
    int flags, 
    int timeout, 
    out IntPtr pdwResult);

const int SMTO_ABORTIFHUNG = 2;

public bool RespondingWithinMs(Process process, int timeoutMs)
{
    IntPtr ptr2;
    return SendMessageTimeout(
        new HandleRef(process, process.MainWindowHandle), 
        0, 
        IntPtr.Zero, 
        IntPtr.Zero, 
        SMTO_ABORTIFHUNG, 
        timeoutMs,
        out ptr2) != IntPtr.Zero;
}
Run Code Online (Sandbox Code Playgroud)