学习C#,WPF。我遇到过一个单靠研究无法解决的问题。
我想从另一个类中存在的另一个线程更新文本框控件的文本。
我知道线程已启动,正在运行并且有可用于填充文本框的数据。我无法弄清楚如何从第二个线程解决GUI中的文本框控件。
我的文本框控件名为'txt_CPU',我希望'cpuCount'出现在其中。我确定我需要使用委托,但我无法将这些示例与我的代码联系起来。
帮助表示赞赏。 (我确信我的代码中可能存在其他“问题”,这是正在进行的粗略学习)
所以我们有线程创建。
public MainWindow()
{
InitializeComponent();
//start a new thread to obtain CPU usage
PerformaceClass pc = new PerformaceClass();
Thread pcThread = new Thread(pc.CPUThread);
pcThread.Start();
}
它正在调用的类
public class PerformaceClass
{
public string getCPUUsage()
{
PerformanceCounter cpuCounter;
cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
return cpuCounter.RawValue.ToString() + "%";
}
public void CPUThread()
{
PerformaceClass PC = new PerformaceClass();
int i = 0;
while (i < 5)
{
string cpuCount = PC.getCPUUsage();
i++;
System.Threading.Thread.Sleep(500);
// MessageBox.Show(cpuCount);
}
}
}
答案 0 :(得分:3)
一种方法是向PerformaceClass
添加事件处理程序,如下所示:
public class PerformanceClass
{
public event EventHandler<PerformanceEventArgs> DataUpdate;
....
public void CPUThread()
{
int i = 0;
while (i++ < 5)
{
string cpuCount = getCPUUsage();
OnDataUpdate(cpuCount);
System.Threading.Thread.Sleep(500);
}
}
private void OnDataUpdate(string data)
{
var handler = DataUpdate;
if (handler != null)
{
handler(this, new PerformanceEventArgs(data));
}
}
}
public class PerformanceEventArgs: EventArgs
{
public string Data { get; private set; }
public PerformanceEventArgs(string data)
{
Data = data;
}
}
然后在你的主要使用它:
public MainWindow()
{
InitializeComponent();
//start a new thread to obtain CPU usage
PerformanceClass pc = new PerformanceClass();
pc.DataUpdate += HandleDataUpdate;
Thread pcThread = new Thread(pc.CPUThread);
pcThread.Start();
}
private void HandleDataUpdate(object sender, PerformanceEventArgs e)
{
// dispatch the modification to the text box to the UI thread (main window dispatcher)
Dispatcher.BeginInvoke(DispatcherPriority.Normal, () => { txt_CPU.Text = e.Data });
}
请注意,我修正了PerformanceClass
中的拼写错误(缺少n
)。