我遇到了一个错误,看起来像是垃圾回收出现了问题:
应用程序崩溃,并显示“在 .NET Runtime 中发生内部错误”
完整的错误信息如下:
进程由于 .NET Runtime 内部错误(IP 71C571C8 (71B20000),退出代码为 80131506)而终止。
正在运行的环境为:
框架版本: v4.0.30319
当重复运行此函数时,会不定期出现此错误:
public static int GetMdiTitledChildWindows(IntPtr parentWindow)
{
IntPtr mdiClient = FindWindowEx(parentWindow, IntPtr.Zero, MdiClient, "");
List<IntPtr> handles = new List<IntPtr>();
EnumChildWindows(mdiClient, (hwnd, param) =>
{
handles.Add(hwnd);
return true;
}, IntPtr.Zero);
int counter = 0;
foreach (IntPtr handle in handles)
{
StringBuilder builder = new StringBuilder();
GetWindowText(handle, builder, GetWindowTextLength(handle)+1);
if (builder.Length > 0)
{
counter++;
}
}
return counter;
}
FindWindowEx()
、EnumChildWindows()
和 GetWindowText()
都是类似于以下定义的 p/invoke 签名:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam);
这个错误似乎只在我多次运行该方法后出现,但这种情况并不一致。有时它可以工作,有时它不能。
有什么建议可以解决这个问题吗?