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)
归档时间: |
|
查看次数: |
3893 次 |
最近记录: |