C#关于WPF中线程和多线程的一般问题

本文关键字:问题 多线程 关于 WPF 线程 | 更新日期: 2023-09-27 18:29:30

嗨,我正在寻找一些关于c#编码的基本信息,尤其是WPF。

首先,我真的不明白,当我必须用Invoke更新WPF中的表单组件时,什么时候不需要。

例如,如果你有一个简单的按钮点击事件,你通常会在其中做这样的事情:

this.label1.content = this.dataObject.Position;

但是,例如,如果您轮询大量数据,通常会调用标签1。

我不明白什么时候我必须调用,什么时候不能调用。它依赖于我的dataObject实例吗?例如,当我的项目中有我的WPF表单和另一个名为dataObject.cs的类,并且我用初始化这个类时

private dataObject dataO = new dataObject();

在我的WPF表单中,当我使用它时,是否必须调用它,因为它是另一个类?或者更确切地说,我不必调用它,因为它是在我的gui中初始化的,因此gui线程无论如何都在处理这个类?那么,在哪些情况下,我必须调用数据对象?

其次,我想了解如何在c#中提高性能和数据分配。例如,为了获得最佳性能,我应该在gui的哪个位置声明新的线程、变量等?在哪里初始化它们?建议何时创建另一个处理我所有参数的类,以及我如何在WPF代码中调用这个类(以及在哪里)?也许你知道一些关于这个主题的好教程或书籍。

非常感谢!

C#关于WPF中线程和多线程的一般问题

我不明白什么时候我必须调用,什么时候不能调用。

在UI应用程序中,有一个线程处理所有UI呈现。这通常是应用程序启动的主线程(有关更多信息,请参阅消息泵)。根据经验,您不想在这个线程中做任何繁重的工作,因为当您这样做时,就无法处理其他消息。这意味着你的用户界面变得滞后和不负责任。

如果是快速更新,可以在主UI线程中进行。如果操作需要很长时间,请使用Invoke在另一个线程中执行。

Invoke的另一个用途是当您需要从非UI线程更新UI状态时。

其次,我想了解如何在c#中提高性能和数据分配。

在真正需要之前不要进行优化,你提到的东西在性能方面可能并不重要。在这个阶段,我将专注于设计可测试代码和编写测试,而不是性能。当您有明显的性能问题时,您可以使用工具来帮助诊断瓶颈,例如RedGate或JetBrains的评测器。