WPF Dispatcher.调用“挂起”

2023-12-30

我有一个有点复杂的 WPF 应用程序,当尝试使用调度程序在 UI 线程上调用调用时,该应用程序似乎“挂起”或陷入 Wait 调用中。

一般流程是:

  1. 处理按钮上的点击事件
  2. 创建一个新线程 (STA):创建演示者和 UI 的新实例,然后调用该方法断开
  3. 然后断开连接在 UI 上设置一个名为Name
  4. 然后,Name 的设置器使用以下代码来设置属性:

    if(this.Dispatcher.Thread != Thread.CurrentThread)
    {
        this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate{
            this.Name = value; // Call same setter, but on the UI thread
        });
        return;
    }

    SetValue(nameProperty, value); // I have also tried a member variable and setting the textbox.text property directly.

我的问题是当调度员invoke调用方法似乎每次都会挂起,并且调用堆栈表明它处于睡眠、等待或加入 Invoke 实现中。

那么,我是否做错了什么,无论是否明显,或者是否有更好的方法来调用 UI 线程来设置此属性(和其他属性)?

Edit:解决方案是在线程委托末尾(例如正在执行工作的位置)调用 System.Windows.Threading.Dispatcher.Run() - 感谢所有提供帮助的人。


调用是同步的 - 您需要 Dispatcher.BeginInvoke。另外,我相信您的代码示例应该将“SetValue”移动到“else”语句内。

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

WPF Dispatcher.调用“挂起” 的相关文章

随机推荐

  • 如何在c#中设置我想用作应用程序图标的ico?

    我在属性中设置的图标在任务栏和应用程序窗口中可见 但资源管理器中的应用程序图标不同 您设置的应用程序图标是否在不同的图标大小下具有不同的图像 这就是您在资源管理器中看到差异的原因 要对此进行测试 请在 Visual Studio 中打开您的
  • 在 Python 中将位转换为字节

    我正在尝试在 Python 3 x 中将位字符串转换为字节字符串 在每个字节中 位是从高位到低位填充的 如有必要 最后一个字节用零填充 位字符串最初存储为布尔值或整数 0 或 1 的 集合 我想返回 0 255 范围内的整数 集合 我所说的
  • iPhone屏幕分辨率在未来硬件中的变化

    在开发应用程序时 我一段时间以来一直担心的是图像和视图组件的硬编码几何图形 这些图形和视图组件理所当然地认为当前几代显示器的 320x480 特性是理所当然的 我在 StackOverflow 和在屏幕尺寸中硬编码的示例 教程中看到了很多答
  • phpstorm中如何设置行注释的样式

    如何将 PHPStorm 中行注释的默认样式更改为缩进级别而不是第一列 if condition At first column At indentation level 对于 Ctrl 行注释 位于 设置 gt 代码样式 gt PHP g
  • 如何将节点 Winston JSON 输出更改为单行

    当我创建一个nodejs Winston控制台记录器并设置json true 它总是以多行格式输出 JSON 日志 如果我将它们通过管道传输到一个文件并尝试 grep 该文件 我的 grep 命中仅包含日志行的一部分 我希望温斯顿以 JSO
  • 如何在html视图中从数据库获取数据到Dropdownlist

    我正在创建一个网页 其中有一个Dropdownlist 我必须从数据库中检索 drop down list 的数据 有没有办法从数据库获取数据到html视图我的html代码
  • CSS3多重过渡反转动画

    我有一个 div 我正在尝试使用 CSS 制作动画 div width 100px height 50px moz transition width 1s height 1s 1s div hover width 400px height
  • 如何检查单个字符是否等于给定的一组字符中的至少一个?

    对不起这个标题 请随意将其编辑为更清晰的内容 我有一个字符串 我必须检查该字符串的第一个字符是否等于其他给定字符之间的至少一个 例如 B Z 和 K 在我的例子中 我有大约 10 个字符要检查 但它们不是可以分类为一个范围 我正在按如下方式
  • 无法找出C程序中的逻辑错误

    一种每行打印一个单词的输入的程序 int main int c while c getchar EOF if c c n c t putchar n else putchar c return 0 上面的程序正确打印结果 每行一个字 相应地
  • OmniContacts gem 总是无法导入我的 yahoo 联系人

    我正在使用 OmniContacts gem 将联系人从 yahoo 和 gmail 导入到我的应用程序 现在雅虎进口商停止工作 我的控制器上有以下操作 def contacts callback contacts request env
  • AngularJS 指令中没有值的属性

    我已经编写了一个具有隔离范围的指令 app directive myDirective function return restrict E scope attr1 attr2 noValueAttr what to put here li
  • Docker for Windows Kubernetes pod 在创建新部署后获取 ImagePullBackOff

    我已经成功构建了 Docker 镜像并在 Docker 群中运行它们 当我尝试构建映像并使用 Docker Desktop 的 Kubernetes 集群运行它时 docker build t myimage f myDockerFile
  • 如何比较两个字符串汇编

    谁能告诉我如何用汇编语言比较两个字符串 我写了以下内容 但它似乎不起作用 assume cs code ds data data segment sirlung db abcdjjj lungimelung equ sirlung sirs
  • 从 Mac 终端运行/打开 VSCode

    我想通过运行此命令从 Mac OSX 终端运行 打开 Visual Studio Codecode 我在这里找到了说明 https code visualstudio com Docs setup https code visualstud
  • AppBarLayout 和 Toolbar 的新 Android 设计库错误

    我正在使用基于此示例的新 Android 设计库克里斯班斯 奶酪广场 https github com chrisbanes cheesesquare在 github 和here http android developers blogsp
  • 未能在 SOAP 上加载外部实体错误

    我称为位于 https 协议上的 Web 服务 我在调用它时收到 无法加载外部实体 错误 正如我在 google 上搜索的那样 这是因为在 PHP5 中 SOAP 类不会解析位于安全 HTTPS 连接上的 WSDL 文件 解决办法是什么 我
  • iOS:检测我的SDK是否安装在设备上的其他应用程序上

    我正在为移动设备开发基于位置的问答 SDK 当询问有关特定位置的问题时 服务器端会定位最相关的用户并将问题发送给该用户 如果用户未能回答 问题将发送给第二好的用户 依此类推 问题是我的 SDK 可能安装在设备上的多个应用程序上 这意味着用户
  • 如何为 Rust 终端应用程序启用可编辑的用户输入?

    我正在用 Rust 编写一个带有经典的基于终端的 REPL 环境项目的最小 Lisp 如何从箭头键读取用户输入 允许他们至少在按下之前在当前输入行上来回移动enter 理想情况下 我将能够扩展功能 包括 返回 以检索旧输入 就像在任何终端或
  • 为什么我们需要其他 JVM 语言

    I see here http www is research de info vmlanguages index html除了 Java 之外 还有很多语言可以在 JVM 上运行 我对在 JVM 中运行的其他语言的整个概念有点困惑 所以
  • WPF Dispatcher.调用“挂起”

    我有一个有点复杂的 WPF 应用程序 当尝试使用调度程序在 UI 线程上调用调用时 该应用程序似乎 挂起 或陷入 Wait 调用中 一般流程是 处理按钮上的点击事件 创建一个新线程 STA 创建演示者和 UI 的新实例 然后调用该方法断开