Dưới mui xe, khi bạn kiểm tra thuộc tính Process.Responding
, chức năng Windows SendMessageTimeout
được gọi.
Chức năng này về cơ bản sẽ gửi thông báo đến cửa sổ chính của một quy trình khác và kiểm tra xem cửa sổ có chấp nhận thông báo trong khoảng thời gian quá 5000 ms hay không (Do đó việc kiểm tra thuộc tính này trên ứng dụng bảng điều khiển không có hiệu lực).
Nếu bạn muốn sử dụng một thời gian chờ tùy chỉnh, bạn có thể chỉ cần cũng gọi SendMessageTimeout
chức năng bản thân:
[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;
}
Nguồn
2011-07-21 19:54:55
Đó là chính xác những gì nó nói: Đây luôn luôn là một trong những thông điệp un-userfriendly đó thực sự đến từ chi tiết triển khai kỹ thuật: vòng lặp tin nhắn không phản hồi. – sehe