gpt4 book ai didi

c# - 使用 Dispatcher.Invoke 从非主线程更改 WPF 控件

转载 作者:IT王子 更新时间:2023-10-29 03:42:40 24 4
gpt4 key购买 nike

我最近开始使用 WPF 编程并遇到了以下问题。我不明白如何使用 Dispatcher.Invoke() 方法。我在线程方面有经验,我制作了一些简单的 Windows 窗体程序,我只是在其中使用了

Control.CheckForIllegalCrossThreadCalls = false;

是的,我知道这很蹩脚,但这些都是简单的监控应用程序。

事实是现在我正在制作一个在后台检索数据的 WPF 应用程序,我启动一个新线程来调用检索数据(从网络服务器),现在我想在我的 WPF 表单上显示它.问题是,我无法从此线程设置任何控件。甚至没有标签或任何东西。如何解决?

回复评论:
@Jalfp:
所以当我获取数据时,我在“新模式”中使用了这个 Dispatcher 方法?或者我应该让后台工作人员检索数据,将其放入一个字段并启动一个新线程,等待该字段被填充并调用调度程序将检索到的数据显示到控件中?

最佳答案

首先要了解的是,Dispatcher 并非设计用于运行长时间阻塞操作(例如从 WebServer 检索数据...)。当您想要运行将在 UI 线程上执行的操作(例如更新进度条的值)时,您可以使用 Dispatcher。

您可以做的是在后台工作程序中检索您的数据,并使用 ReportProgress 方法在 UI 线程中传播更改。

如果你真的需要直接使用Dispatcher,很简单:

Application.Current.Dispatcher.BeginInvoke(
DispatcherPriority.Background,
new Action(() => this.progressBar.Value = 50));

关于c# - 使用 Dispatcher.Invoke 从非主线程更改 WPF 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1644079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com