p/invoke путь РЕДАКТИРОВАНИЕ : Измененный на GlobalMemoryStatusEx для предоставления точных результатов (heh)
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
private class MEMORYSTATUSEX
{
public uint dwLength;
public uint dwMemoryLoad;
public ulong ullTotalPhys;
public ulong ullAvailPhys;
public ulong ullTotalPageFile;
public ulong ullAvailPageFile;
public ulong ullTotalVirtual;
public ulong ullAvailVirtual;
public ulong ullAvailExtendedVirtual;
public MEMORYSTATUSEX()
{
this.dwLength = (uint)Marshal.SizeOf(typeof(NativeMethods.MEMORYSTATUSEX));
}
}
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer);
Тогда использование как:
ulong installedMemory;
MEMORYSTATUSEX memStatus = new MEMORYSTATUSEX();
if( GlobalMemoryStatusEx( memStatus))
{
installedMemory = memStatus.ullTotalPhys;
}
Или можно использовать WMI (управляемый, но медленнее) для запросов "TotalPhysicalMemory" в классе "Win32_ComputerSystem".
Редактирование зафиксированный код на комментарий с joel-llamaduck.blogspot.com
Анимация кадра не анимирует изменение размера шрифта. Если я понимаю, что вы наблюдаете за своим поведением, я думаю, что у вас есть метка adjustsFontSizeToFitWidth
, установленная на «True», так что вы видите, что кадр анимируется до размера, за которым следует мгновенная корректировка размера шрифта.
Вы можете попытаться масштабировать преобразование метки так, чтобы рамка и шрифт масштабировались одновременно.