我要做的是使控件(在同一进程中,但我无法控制)重绘自身,并让我的代码阻塞,直到它完成重绘。
我尝试使用UpdateWindow
,但这似乎并没有等待重绘完成。
我需要等待它完成重绘的原因是我想在之后抓取屏幕。
该控件不是 dotNet 控件,而是常规的 windows 控件。
我已经确认:
- 手柄是正确的。
UpdateWindow
返回真。- 尝试
InvalidateRect(hWnd, IntPtr.Zero, true)
在调用之前发送UpdateWindow
以确保窗口需要失效。 - 尝试在控件的父窗口上做同样的事情。
使用的代码:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool InvalidateRect(IntPtr hWnd, IntPtr rect, bool bErase);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool UpdateWindow(IntPtr hWnd);
public bool PaintWindow(IntPtr hWnd)
{
InvalidateRect(hWnd, IntPtr.Zero, true);
return UpdateWindow(hWnd);
}
//returns true