判断程序假死 挂起的方法
2015-12-15 22:25
591 查看
查了些资料,正在整理中。现在记录一下:
调用的方法:
方法一:判断程序的线程是否Responding。
Process有此属性,获取了Process后直接判断Responding属性即可。方法二:API方法 IsHungAppWindow
<span style="white-space:pre"> </span>#region 窗体是否挂起 [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern bool IsHungAppWindow(IntPtr hwnd); #endregion
方法三:API 给程序发送消息 SendMessageTimeout
声明方法为:public enum SendMessageTimeoutFlags : uint { SMTO_NORMAL = 0x0, SMTO_BLOCK = 0x1, WM_NULL = 0, SMTO_ABORTIFHUNG = 0x2, SMTO_NOTIMEOUTIFNOTHUNG = 0x8 }
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern IntPtr SendMessageTimeout( IntPtr windowHandle, uint Msg, IntPtr wParam, IntPtr lParam, SendMessageTimeoutFlags flags, uint timeout, out uint result);
调用的方法:
public static bool IsExeNotResponse(IntPtr hwnd) { var lRes = uint.MinValue; //Register the message var lMsg = RegisterWindowMessage("WM_HTML_GETOBJECT"); //Get the object SendMessageTimeout(hwnd, lMsg, IntPtr.Zero, IntPtr.Zero, SendMessageTimeoutFlags.WM_NULL, 1000, out lRes); return lRes == 0; }
总结:
这几个方法都是可行的,但是我们需要具体问题具体分析。我还没有搞清楚这三种方法适用的情况,以后补上吧。相关文章推荐
- Android Manifest 用法
- 什么是 GraphQL?
- Spark RDD API详解(一) Map和Reduce
- c#调用COM组件
- 一个小型js框架myJSFrame附API使用帮助
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析