Я начал кодировать свое первое приложение WPF, и у меня возникли проблемы с текстовым полем, в котором отображается некоторая системная информация (процессор, память, использование диска, MAC-адрес и т. Д.).Мои приложения имеют навигацию между двумя страницами, и указанное текстовое поле находится на одной из страниц.Содержимое текстового поля извлекается с помощью запросов WMI.Проблема, которую я заметил, заключается в том, что при переходе на страницу с текстовым полем пользователь останавливает интерфейс на две секунды перед тем, как перейти на страницу и отобразить ее.Я новичок, и я думаю, что многие запросы WMI (могут быть и плохо закодированы) делают это, или я неправильно загружаю содержимое в текстовое поле.Пример построения моих запросов
public string getCPU()
{
ManagementObjectSearcher searcher = new
ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Processor");
StringBuilder sb = new StringBuilder();
foreach (ManagementObject wmi in searcher.Get())
{
try
{
sb.Append("Processor: " + wmi.GetPropertyValue("Name").ToString() + Environment.NewLine);
}
catch
{
return sb.ToString();
}
}
return sb.ToString();
}
public string getRAMsize()
{
ManagementClass mc = new ManagementClass("Win32_ComputerSystem");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject item in moc)
{
return Convert.ToString(Math.Round(Convert.ToDouble(item.Properties["TotalPhysicalMemory"].Value) / (1024 * 1024 * 1024), 0)) + " GB";
}
return "RAMsize";
}
И вот что я использую для извлечения данных из текстового поля:
private void TextBox1_Loaded(object sender, RoutedEventArgs e)
{
TextBox1.Text = getCPU();
TextBox1.Text += "Memory: " + getRAMsize() + Environment.NewLine;
TextBox1.Text += "Free Space: " + GetTotalFreeSpace(sysdrive) + " GB" + Environment.NewLine;
if (Is64BitSystem)
{
TextBox1.Text += getOS() + " 64bit" + Environment.NewLine;
}
else
{
TextBox1.Text += getOS() + " 32 Bit" + Environment.NewLine;
}
TextBox1.Text += "MAC Address : " + System.Text.RegularExpressions.Regex.Replace(GetMacAddress().ToString(), ".{2}", "$0 ") + Environment.NewLine;
TextBox1.Text += av();
}
Мой вопрос - что я делаю неправильно и какмогу ли я обойтись с этим.На мой взгляд, если запросы построены правильно, это будет потому, что они выполняются снова и снова каждый раз, когда текстовое поле загружается (при навигации или при запуске), и, возможно, если бы я мог заставить его загрузить только один раз и запомнить эти значения (так какбольшая часть данных должна оставаться неизменной).Но, как я уже сказал, я новичок, и любая помощь будет принята с благодарностью.Заранее спасибо