WPF 元素事件处理程序中的 UI 更新

2023-11-24

WPF 中的 UI 更新存在问题。

我有这样的代码:

    private void ButtonClick_EventHandler(object sender, RoutedEventArgs e)
    {
        Label.Visibility = Visibility.Visible;
        TextBox.Text = "Processing...";

        LongTimeMethod(); //some long operation
    }

问题是,在 LongTimeMethod 结束(即事件处理程序结束)之前,Label.Visibility 和 TextBox.Text 将不会更改。

到目前为止我是这样解决的:

    private void ButtonClick_EventHandler(object sender, RoutedEventArgs e)
    {
        Label.Visibility = Visibility.Visible;
        TextBox.Text = "Processing...";

        Dispatcher.BeginInvoke(new Action(LongTimeMethod), 
            DispatcherPriority.Background);
    }

有没有其他不使用调度程序调用的解决方案?调用 this.UpdateLayout() 没有帮助。


With Dispatcher.BeginInvoke你仍在使用 UI 线程LongTimeMethod()。如果这不是必需的(即它正在执行某种后台处理),我建议使用 TPL 在后台线程上运行它:

private void ButtonClick_EventHandler(object sender, RoutedEventArgs e)
{
    Label.Visibility = Visibility.Visible;
    TextBox.Text = "Processing...";

    Task.Factory.StartNew(() => LongTimeMethod())
        .ContinueWith(t =>
        {
            Dispatcher.BeginInvoke((Action)delegate()
            {
                TextBox.Text = "Done!";
            });
        });

}

使用此方法,长时间运行的方法将在后台线程上处理(因此 UI 线程将可以自由地继续渲染,并且应用程序不会冻结),并且您可以执行任何更改 UI 的操作(例如更新文本框)文本)在用户界面上Dispatcher当后台任务完成时

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 元素事件处理程序中的 UI 更新 的相关文章

  • 如何? WPF 窗口 - 最大化,不调整大小/移动

    我正在尝试创建一个已最大化打开的 WPF 窗口 无需调整大小 移动 在系统菜单中 也不在边框中 它应该一直最大化 除非用户最小化它 我尝试将 WindowState Maximized 和 ResizeMode CanMinimize 放在
  • 无锁算法真的比全锁算法性能更好吗?

    陈雷蒙德 http blogs msdn com b oldnewthing 一直在做一个huge http blogs msdn com b oldnewthing archive 2011 04 15 10154245 aspx ser
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 向无锁队列添加阻塞函数

    我有一个基于循环缓冲区的无锁多生产者 单消费者队列 到目前为止 它只有非阻塞push back and pop front 来电 现在我想添加这些调用的阻塞版本 但我想尽量减少这对使用非阻塞版本的代码性能的影响 也就是说 它不应该将它们变成
  • 如何复制文件并具有取消复制的功能?

    我正在努力拥有program能够取消复制 因此我不能使用Microsoft VisualBasic FileIO FileSystem CopyFile 有一些包装用于CopyFileEx在网络上 例如here http msdn micr
  • 如何处理或避免BlockedIndefinitelyOnSTM异常?

    我花了很多时间来解决我正在处理的应用程序中遇到的问题 该应用程序是一个 Web 应用程序 使用 scotty 公开 REST 端点 它使用一个TVar保持其更新的状态STM a由前端层触发的动作 由于该应用程序基于事件溯源原则 因此业务层生
  • 如何处理 MSTest 中的 currentDomain.UnhandledException

    我尝试根据答案实施解决方案单元测试时如何处理其他线程引发的异常 https stackoverflow com a 934604 518530 但我仍然不明白在处理程序中要做什么 假设我有一个测试 TestMethod void Test
  • Netty UDP 服务器中的线程未同时执行

    我正在分析的代码使用 Netty NioDatagramChannelFactory 创建 UDP 服务器 它创建一个线程池 ExecutorService threadPool Executors newCachedThreadPool
  • WPF 创建同级窗口并关闭当前窗口

    我需要的是我的窗口类中的这样一个事件处理程序 void someEventHandler object sender RoutedEventArgs e MyNewWindow mnw new MyNewWindow mnw Owner W
  • 如何使用 c++11 CAS 实现 ABA 计数器?

    我正在基于此实现一个无锁队列算法 http www cs rochester edu research synchronization pseudocode queues html 它使用计数器来解决 ABA 问题 但我不知道如何用c 11
  • 解释 System.Diagnostics.CodeAnalysis.SuppressMessage

    我在某些应用程序中有这种代码 来自微软 assembly System Diagnostics CodeAnalysis SuppressMessage Microsoft Naming CA1702 CompoundWordsShould
  • Java-线程与CPU的关系

    我对多线程还很陌生 我正在开发一个项目 尝试在我的 Java 程序中使用 4 个 CPU 我想做类似的事情 int numProcessors Runtime getRuntime availableProcessors ExecutorS
  • 多线程环境下如何更好的使用ExecutorService?

    我需要创建一个库 其中包含同步和异步方法 executeSynchronous 等待直到有结果 返回结果 executeAsynchronous 立即返回一个 Future 如果需要 可以在其他事情完成后进行处理 我的图书馆的核心逻辑 客户
  • JavaFX Platform.runLater 的使用以及从不同线程访问 UI

    我有几个问题Platform runLater 我有一个 JavaFX 应用程序类 在这个类中 我运行一个线程 该线程从网络套接字读取数据 现在当我创建一个新的Stage在线程内部 系统抛出异常 JavaFX 事件调度程序线程和我的网络读取
  • 使用 ICollectionView 过滤 ObservableCollection

    I have ObservableCollection绑定到dataGrid现在我想过滤我看到需要使用的呈现数据ICollectionView但我不知道如何添加ICollectionView和我的MVVM图案 我的代码简化如下 public
  • 为什么“事件”在 Chrome 中全局可用,而在 Firefox 中则不然?

    在回答另一个问题时 出现了一个与event对象在匿名函数中可用 无需传入 在 Chrome 中 下面的代码工作正常 但 Firefox 会抛出错误 document ready function uspsSideboxTrackingClo
  • Java 唤醒休眠线程

    我阅读了其他帖子 但没有找到我正在寻找的确切答案 所以我希望有人能给出一些澄清 我有一个将运行一段时间的程序 我有一些在后台运行的线程来执行各种任务 为了简单起见 让我们考虑 3 个线程 ThreadA每 10 秒执行一次任务 其中Thre
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • 理解 C++11 中的 std::atomic::compare_exchange_weak()

    bool compare exchange weak T expected T val compare exchange weak 是 C 11 中提供的比较交换原语之一 它是weak即使对象的值等于 它也会返回 falseexpected

随机推荐

  • StreamingResponseBody 中的异常处理不起作用

    我试图捕获在我的实现中抛出的异常StreamingResponseBody 我可以看到类内部抛出异常 但是我的处理似乎有效 但是我无法获取自定义消息 我的响应代码是200 GetMapping path test produces appl
  • Android AppWidget 在重新启动之前不会显示在蜂窝菜单中

    我已经为 Honeycomb 创建了一个 AppWidget 它运行良好 但首次安装时 它不会显示在 Widgets 菜单中 因此无法将其添加到主屏幕 重新启动设备将使其显示出来 或者在开发过程中 从 Eclipse 发送两次将使其显示出来
  • 保存到用户“我的文档”中的文件夹

    当我为应用程序创建安装程序时 我将在 我的文档 中创建一个文件夹 该文件夹将用于保存应用程序中的文件 我希望我的应用程序在保存文件和打开文件对话框打开时自动提取此目录 现在我的问题是 我需要使用什么字符串才能访问 我的文档 中的文件夹 我知
  • 在 Android Studio 中导入模块

    如何在 Android Studio 中导入外部模块 名为 ViewPagerIndicator 在 Android Studio 3 3 及更低版本中导入模块的步骤 Go to File gt gt New gt gt 导入模块 选择要导
  • ios url从邮件重定向到应用程序

    是否可以使用通过邮件发送的 URL 来启动我的应用程序 例如 我有用户个人资料 用户想要邀请他们的朋友进入应用程序 他们发送一封电子邮件 其中包含一些网址 例如 通过此链接加入我 http appname sender id 25 some
  • 复制和克隆有什么区别?

    这个问题似乎暗示这只是一个实现细节 memcpyvs 但我找不到任何关于差异的明确描述 Clone专为任意重复而设计 Clone类型的实现T可以执行创建新对象所需的任意复杂操作T 它是一个正常特征 除了在前奏中 因此需要像正常特征一样使用
  • 基于一个代码库/项目创建演示版和完整版应用程序

    我在一个项目中使用 Eclipse 开发了一款 Android 应用程序 它是结构化的 来自 iPhone 因此一个常量定义它是演示版还是完整版 现在我遇到的问题是 每次我想创建演示版本时 我都需要更改常量 但还需要使用不同的包名称制作项目
  • BitBucket:主机密钥验证失败

    我想将远程存储库克隆到本地计算机 我使用了命令 git clone email protected
  • Mac OSX El Capitan 上的 JDK 7/JavaFX 2 应用程序

    我刚刚升级到 El Capitan 在启动在 JDK1 7 0u79 Oracle 提供的最新版本 下运行的自定义 JavaFX2 应用程序时遇到问题 启动应用程序时 我收到此异常 Exception in thread main java
  • Jmeter远程连接抛出“连接拒绝主机”

    我在 unbundu 机器中使用 JMeter 设置了分布式负载测试环境 gt Master 运行JMeter GUI的系统 控制各个slave gt Slave 运行jmeter server的系统 接收来自master的命令并向被测服务
  • 在 Windows 7 下使用 python 3.3 (Anaconda) 构建最小的 cython 文件

    当我尝试在 Windows 7 下使用 Python 3 3 Anaconda 3 构建最小的 Cython 文件 test pyx 时 我收到一个奇怪的错误 C Users myname Test cython gt python set
  • 如何在 Swift 框架中使用 Cocoapods?

    我正在尝试使用 Cocoapods 中的一些库在 Swift 中为 iOS 创建一个新的 Cocoa Touch 框架 但我无法让它工作 我知道有一些关于此的悬而未决的问题 但它们似乎都不能解决我的问题 出于测试目的 我刚刚创建了一个空的
  • 用python求解非线性方程组

    我可以用Python中的参数求解非线性方程组吗 有示例或教程吗 我可以在 Maple 中轻松完成此操作 但我的特定系统的表达式非常大 复制它们非常困难 例子 sigma y x 0 x rho z y 0 x y beta z 0 您应该得
  • 替换模式内所有出现的地方

    我有一个像这样的字符串 some text other text and some other text this should not be replaced but this should 我希望它成为 some text other
  • 使用 Electron 嵌入 Mongodb

    我将 MongoDB 源代码保存在电子源代码中 并使用以下命令运行 MongoDB const app require electron app const child process require child process const
  • Rails:使用回形针防止重复照片上传?

    如果用户尝试使用 Paperclip 将同一张照片上传到 Rails 应用程序两次 是否会引发验证错误 Paperclip 似乎没有提供此功能 我正在使用 Rails 2 3 5 和回形针 明显地 解决方案 或至少其中之一 根据 Beerl
  • 创建一个只有一个对角线的 UIView

    我需要创建一个左边框倾斜的 UIView45度我想知道 有没有办法以编程方式实现这一目标 做CA变换3D在这种情况下帮助我 因为它不是真正的 3D 旋转 Edit 这是一张图片 更多地解释了我所需的输出 如果您只想要没有内容的形状 那么您可
  • gmpxx.h:没有这样的文件或目录

    我刚刚安装了一个全新的 mingw 32 位 下载它来自官方项目页面来自 Sourceforge 我安装了包中的所有内容 所有编译器等等 然后我从下载hereMinGW 的 gmp 我将 gmp 5 0 1 1 mingw32 src ta
  • 显示用户窗体后将焦点设置回应用程序窗口

    当显示用户表单时 运行其Show方法 它不仅显示在屏幕上 而且还获取焦点 例如击键的目的地 比如说 用户窗体是一个定制的工具栏 它是Show开火Workbook Open 但表单本身的使用相对较少 因此我们希望焦点在其出现后立即返回到主应用
  • WPF 元素事件处理程序中的 UI 更新

    WPF 中的 UI 更新存在问题 我有这样的代码 private void ButtonClick EventHandler object sender RoutedEventArgs e Label Visibility Visibili