作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
学习 C#、WPF。我遇到了一个仅靠研究无法解决的问题。
我想从另一个类中存在的另一个线程更新文本框控件的文本。
我知道线程已启动、正在工作并且有可用于填充文本框的数据。我不知道如何从第二个线程解决 GUI 中的文本框控件。
我的文本框控件称为“txt_CPU”,我希望“cpuCount”出现在其中。我确定我需要使用委托(delegate),但我无法将示例与我的代码相关联。
帮助表示赞赏。 (我确信我的代码中可能还有其他“问题”,这是正在进行的粗略学习)
所以我们有线程创建。
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);
}
}
}
最佳答案
一种方法是将事件处理程序添加到您的 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
)。
关于c# - 在另一个类中从另一个线程更新文本框内容。 C#,WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8458956/
我是一名优秀的程序员,十分优秀!