【发布时间】:2015-09-30 02:43:09
【问题描述】:
我在一个新类中有这段代码:
private static bool EnumWindowsCallback(IntPtr hWnd, IntPtr lParam)
{
bool specialCapturing = false;
if (hWnd == IntPtr.Zero) return false;
if (!IsWindowVisible(hWnd)) return true;
if (!countMinimizedWindows)
{
if (IsIconic(hWnd)) return true;
}
else if (IsIconic(hWnd) && useSpecialCapturing) specialCapturing = true;
if (GetWindowText(hWnd) == PROGRAMMANAGER) return true;
windowSnaps.Add(new WindowSnap(hWnd, specialCapturing));
doStuff(new WindowSnap(hWnd, specialCapturing));
return true;
}
public static void doStuff(object objtoadd)
{
foreach (Form frm in Application.OpenForms)
{
if (frm.GetType() == typeof(Form1))
{
Form1 frmTemp = (Form1)frm;
frmTemp.addItemToListBox(objtoadd);
}
}
}
当运行程序时,它会到达该行:
doStuff(new WindowSnap(hWnd, specialCapturing));
但它永远不会过线:
if (frm.GetType() == typeof(Form1))
在form1中我做到了:
public void addItemToListBox(object item)
{
listBoxSnap.Items.Add(item);
}
但它从未调用过 addItemToListBox,因为它没有通过类中的行。
我的主要目标是在添加一项的新类中实时更新 form1(listBoxSnap) 中的列表框:
frmTemp.addItemToListBox(objtoadd);
然后在 listBox 中显示/显示该项目,然后是下一个项目,依此类推。 直到现在我做到了:
this.listBoxSnap.Items.AddRange(WindowSnap.GetAllWindows(true, true).ToArray());
但这需要时间,因为它必须等到所有项目都添加后才能在 listBoxSnap 中显示它们。
WindowSnap 是新类,GetAllWindows 是:
public static WindowSnapCollection GetAllWindows(bool minimized, bool specialCapturring)
{
windowSnaps = new WindowSnapCollection();
countMinimizedWindows = minimized;//set minimized flag capture
useSpecialCapturing = specialCapturring;//set specialcapturing flag
EnumWindowsCallbackHandler callback = new EnumWindowsCallbackHandler(EnumWindowsCallback);
EnumWindows(callback, IntPtr.Zero);
return new WindowSnapCollection(windowSnaps.ToArray(), true);
}
在此方法中,它调用 EnumWindowsCallback,我想在其中更新 listBoxSnap。
也许我需要以某种方式更新公共静态 WindowSnapCollection GetAllWindows 方法中的 listBoxSnap。
【问题讨论】: