我想做的是让一个控件(在同一进程中,但我无法控制它)重新绘制自己,并且我的代码会阻塞,直到它完成重绘。我尝试使用
UpdateWindow
,但似乎不等待重绘完成。我需要等待它完成重绘的原因是之后我想抓取屏幕。该控件不是dotNet控件,而是常规的Windows控件。我已确认以下内容:句柄正确;UpdateWindow
返回true;在调用UpdateWindow
之前尝试发送InvalidateRect(hWnd, IntPtr.Zero, true)
以确保窗口需要无效化;尝试在控件的父窗口上执行相同的操作。使用的代码:[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