我遇到以下情况:一个有2页的WPF应用程序(使用导航)。其中一个页面上有一个文本框,该文本框使用WMI查询和注册表数据显示一些系统信息。 这个问题的问题在于,当我导航到该页面时,信息总是会刷新,这也意味着所有正在执行的任务都已重做,这使texbox需要一些时间才能开始显示信息(是的,一些WMI查询非常耗时)。 由于我需要的99%的数据不需要刷新(不会更改),我该如何只执行一次,然后将其绑定到该文本框,以使它不总是刷新?
home.xaml.cs(页面)中的文本框代码
private void TextBox1_Loaded(object sender, RoutedEventArgs e)
{
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.DoWork += new DoWorkEventHandler(delegate (object o, DoWorkEventArgs args)
{
});
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(delegate (object o, RunWorkerCompletedEventArgs args)
{
TextBox1.Text = Registry.GetValue(@"HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "ProcessorNameString", null).ToString().Replace("(R)", "").Replace("(TM)", "") + Environment.NewLine;
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() + " 32bit" + Environment.NewLine;
}
TextBox1.Text += diskname() + Environment.NewLine;
TextBox1.Text += "MAC Address : " + System.Text.RegularExpressions.Regex.Replace(GetMacAddress().ToString(), ".{2}", "$&-").TrimEnd('-') + Environment.NewLine;
TextBox1.Text += av();
});
bw.RunWorkerAsync();
}
它做什么与我想要什么:每次我导航到它时,文本框都会刷新(当然是textbox_loaded ...),并且需要一两秒钟。我想禁用刷新。我希望它加载一次并保留这些值,直到再次打开该应用程序
答案 0 :(得分:0)
您可以在第一次运行时设置bool标志。
public void Initilize()
{
if (!_Initilized)
{
_Initilized = true;
// do initial queries here...
}
myusercontrol.DataContext = MyViewModel;
}
答案 1 :(得分:0)
哇...经过反复试验,我不敢相信将代码放到TextBox1_Initialized事件中这么容易。
fold