C# 如何始终在单独的线程上运行控件及其所有子线程?

C# 如何始终在单独的线程上运行控件及其所有子线程?,c#,winforms,multithreading,controls,C#,Winforms,Multithreading,Controls,我已经编写了一个应用程序,它对巨大的浮点数进行大量计算,这使得用户界面在大多数时候都没有响应 我正在考虑为这个应用程序添加一个状态栏,并显示一些关于cpu负载、已用内存和进度栏的信息。考虑将标签和进度条添加到StIsBar作为子系统,我如何在单独的线程上运行这个状态条,它可以可靠地尽可能地响应?< /P> 我已经可以正常使用进度条和系统诊断工具了。我要找的是你的想法和技巧,可能还有一些代码 更新 我希望状态栏显示实时cpu和内存的详细信息。如何解决这个问题?最好的办法就是在BackgroundW

我已经编写了一个应用程序,它对巨大的浮点数进行大量计算,这使得用户界面在大多数时候都没有响应

我正在考虑为这个应用程序添加一个状态栏,并显示一些关于cpu负载、已用内存和进度栏的信息。考虑将标签和进度条添加到StIsBar作为子系统,我如何在单独的线程上运行这个状态条,它可以可靠地尽可能地响应?< /P> 我已经可以正常使用进度条和系统诊断工具了。我要找的是你的想法和技巧,可能还有一些代码

更新


我希望状态栏显示实时cpu和内存的详细信息。如何解决这个问题?

最好的办法就是在BackgroundWorker上进行谷歌搜索。下面是一个关于如何使用它的特殊结果


最好的办法就是在BackgroundWorker上进行谷歌搜索。下面是一个关于如何使用它的特殊结果


你搞错了。您应该在同一线程中运行所有UI,并在后台工作程序中运行长计算。试图在同一个应用程序中的不同线程中运行UI只会带来痛苦。

您的做法是错误的。您应该在同一线程中运行所有UI,并在后台工作程序中运行长计算。尝试在同一应用程序中的不同线程中运行UI只会带来痛苦。

我很确定您的大量计算是在后台工作线程中运行的,而不是您的UI更新。修复原因而不是症状:使用backgroundworker运行计算。您不能。所有UI控件都必须在一个称为UI线程的线程上运行。正如其他人所建议的,使用
BackgroundWorker
组件进行计算是正确的方法。MSDN文档有一个很好的例子。那么我如何才能实时显示cpu使用率和内存可用性呢?!我唯一能想到的是把它们放在一个循环中,但是UI的其余部分会发生什么呢?使用一个计时器进行定期更新我很确定你的大量计算是在后台工作线程中运行的,而不是你的UI更新。修复原因而不是症状:使用backgroundworker运行计算。你不能。所有UI控件都必须在一个称为UI线程的线程上运行。正如其他人所建议的,使用
BackgroundWorker
组件进行计算是正确的方法。MSDN文档有一个很好的例子。那么我如何才能实时显示cpu使用率和内存可用性呢?!我唯一能想到的是将它们放在一个循环中,但是UI的其余部分会发生什么呢?使用一个计时器进行定期更新,但是我想让状态栏显示实时cpu和内存使用情况,不管应用程序中其他地方发生了什么。这和你说的一样吗?是的。只需运行一个计时器来触发定期更新,并将所有UI保留在主线程中。在远离UI线程的工作线程上运行长计算。谢谢,但我希望状态栏显示实时cpu和内存使用情况,而不管应用程序中其他地方发生了什么。这和你说的一样吗?是的。只需运行一个计时器来触发定期更新,并将所有UI保留在主线程中。在远离UI线程的工作线程上运行长计算器。