如何在 WPF 中使用线程的结果?

2024-01-24

不幸的是,线程和任务对我来说是一个很大的谜。

必须在与 DependencyObject 相同的线程上创建 DependencySource。

我正在努力避免用户界面冻结。我的方法是在线程中完成工作,然后使用线程的输出设置属性。
我有一个基类Job。基本上它是一个包装器,用一个开始一个新线程Input and Output多变的。我启动一个新线程,等到工作完成并尝试将其设置为我的属性MyFoo。但这是行不通的。请参阅上面引用的错误消息。


How can I use a thread* without blocking the UI and set the result to an property in WPF?
* I actually don't care if it is a thread, a task or whatever as long as it is not blocking my UI.

        // ...
        FooJob job = new FooJob {Input = input};
        job.Start();
        while (!job.IsDone) Wait(0.05);
        MyFoo = (BitmapSource) job.Output;


我尝试的是将输出设置为我的字段而不是我的属性并调用属性改变时手动。


这里是实际的包装类

public class Job {
    public object Output;
    public object Input;

    private bool _isDone;
    private readonly object _handle = new object();
    private Thread _thread;

    public bool IsDone {
        get {
            bool tmp;
            lock (_handle) {
                tmp = _isDone;
            }
            return tmp;
        }
        set {
            lock (_handle) {
                _isDone = value;
            }
        }
    }

    public virtual void Start() {
        _thread = new Thread(Run);
        _thread.Start();
    }

    protected virtual void ThreadFunction() {}

    private void Run() {
        ThreadFunction();
        IsDone = true;
    }
}

您收到异常的原因必须在与 DependencyObject 相同的线程上创建 DependencySource。是一个迹象表明BitmapSource已在新线程上创建,您将无法绑定BitmapSource到 UI,除非您在 UI 线程上创建它。然而,因为BitmapSource是可冻结的,您也可以“冻结”它以删除它的线程关联性。所以如果你真的需要创建一个BitmapSource在另一个线程上你将不得不调用Freeze on the BitmapSource在您可以将其绑定到 UI 之前。

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

如何在 WPF 中使用线程的结果? 的相关文章

  • 更改 WPF 应用程序清单?

    我已经发布给微软的评论 http connect microsoft com VisualStudio feedback ViewFeedback aspx FeedbackID 420920WPF 中的对话框未启用 VisualStyle
  • WPF PRISM 事件订阅不会消亡

    我有一个 PRISM RegionManager 其中有几个区域 顶部的功能区区域和其下方用于我的视图的主要内容区域 相当基本 该应用程序以主要内容区域中的 主页 视图开始 当我单击功能区上的按钮时 我将第二个视图注入内容区域并在区域管理器
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • “benaphores”值得在现代操作系统上实施吗?

    当我还是一名 BeOS 程序员时 我读过本文 http www haiku os org legacy docs benewsletter Issue1 26 html Engineering1 26作者 Benoit Schillings
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • iPhone SDK - 在后台线程中运行重复进程

    我有一个iPhone我想在其中每隔一段时间在后台执行一个方法的应用程序1第二 所以在我的主线程中 我有以下代码UIViewController viewDidLoad NSTimer timerWithTimeInterval 1 0 ta
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反

随机推荐

  • 在 Django 模型中使用 Trigram (gin_trgm_ops) 创建 Gin 索引

    django contrib postgres 的新 TrigramSimilarity 功能非常适合解决我遇到的问题 我用它作为搜索栏来查找难以拼写的拉丁名字 问题是名字超过 200 万个 搜索时间比我想要的要长 我想在三元组上创建一个索
  • Pandas:检查列值是否小于任何先前的列值

    我想检查 c 列的任何值是否小于所有先前的列值 在我当前的方法中 我使用 pandas diff 但它只让我与以前的值进行比较 import pandas as pd df pd DataFrame c 1 4 9 7 8 36 df di
  • REST 中的资源和资源表示有什么区别?

    我是 REST 新手 刚刚开始阅读一些教程 真正让我困惑的一件事是 txt xml json 形式的内容是什么 资源还是资源表示形式 一定是后者吧 由于资源可以是视频 音频或其他 MIME 类型 以下面的例子为例 假设我得到的描述类似于 R
  • 长时间等待向 Service Worker 发出请求

    我注意到 等待服务工作人员响应缓存中的项目的时间并不像您预期 的那么快 我发现两者的等待时间相同sw precache和一个定制的书面服务人员 造成此等待时间的可能原因是什么 如何减少它 My fetch自定义 Service Worker
  • ggplot错误的颜色分配

    颜色到十六进制值的分配是错误的 我不明白为什么 在将十六进制颜色添加到数据框之前我对它们进行了排序data然后在 ggplot2 函数中使用 我以为这样就能解决问题 但事实并非如此 我还创建了向量col其中包含十六进制以及 rgb 颜色值
  • Mod_Rewrite 不适用于 codeigniter 站点

    我为我的 codeigniter 站点尝试了 modrewrite 但是当我进入 htaccess 文件时 已经有一个了 RewriteEngine on RewriteCond 1 index php combine php images
  • Swift Scenekit - 居中 SCNText - getBoundingBoxMin:Max 问题

    享受 SCNText 上的alignmentMode 选项带来的乐趣 谷歌搜索了一下 看起来alignmentMode和containerFrame有问题 我发现的替代方案建议使用获取边界框功能来查找文本大小 然后手动进行相应调整 很好 除
  • W3C 验证器显示“提要未验证”“url 必须是完整的 URL”...有什么问题吗?

    正在验证我的提要 它的附件的 URL 为 https archive org download NigelFarageAPersonalMessageToNorthernIrelandVoters Nigel 20Farage 20a 20
  • 当复选框被选中时如何调用javascript函数

    当复选框位于 gridview 内时 如何调用 Javascript 函数 protected void AlteraStatusExpiraSeteDias Click object sender EventArgs e for int
  • 从 Rails 2.3.6 开始不推荐使用 overwrite_params —— 接受的解决方法吗?

    所以 看起来像overwrite params从 Rails 2 3 6 开始已弃用 是否存在被普遍接受为最佳实践的合适解决方法 例如 我曾经能够执行以下操作 我认为这非常有用 url for overwrite params gt pag
  • 散列范围

    我有一个范围元素数组 每个元素都有一个开始和一个结束 在数组内 范围不重叠 并且已排序 即 代码只是为了说明 不要指望它能够编译 var arr 0 3 5 10 15 59 给定一个值 比如 9 是否有范围的哈希函数可以让我快速获取包含该
  • Java构建时间常数配置

    我有一个项目想使用多种配置来构建 我有一个常量需要在构建之间有所不同 但我不知道如何根据我的配置更改它 例如 我希望能够根据配置文件中的值执行以下操作 WebService targetNamespace http example com
  • 在 PHP 中获取浮点数的小数部分的最佳方法是什么?

    在 PHP 中如何找到浮点数的小数部分 例如 如果我有值1 25 我想回来0 25 x x floor x
  • C:表示不带浮点数的分数

    我正在为没有硬件浮点支持的嵌入式系统 MSP430 编写一些代码 不幸的是 当我进行测距时 我需要在代码中使用分数 而精度为 1m 的短程传感器并不是一个很好的传感器 我可以用整数进行尽可能多的数学运算 但到最后 我肯定需要对两个值进行分数
  • 使用 iOS 模块构建 Native View 并在 Titanium 中使用它们

    我想构建一个 iOS 模块 其中有一个 viewController 类及其 xib 文件 现在的问题是如何从我的钛代码中调用该视图 我知道有可用的视图代理 但由于文档不太好 不知道如何使用它们 到目前为止 我已经创建了一个可以传递非图形数
  • 如何从 PHP 中的日期时间戳获取时间和日期?

    我有一根像8 29 2011 11 16 12 AM 我想保存在变量中 例如 dat 8 29 2011 and tme 11 16 12 AM 如何实现这一目标 你能举个例子吗 E g
  • 无法向 Google 电子表格添加行

    我可以打开工作表并从标题中读取单元格 Google 电子表格中的第一行是标题 我已在 Google 电子表格中手动添加了 Name my val1 my val2 my val3 Other 这是相关的谷歌文档 https develope
  • 从 git svn clone 中排除文件

    我正在将 SVN 存储库迁移到 Git 并且我有 7000 多个二进制文件 我希望从一开始就将它们排除在导入之外并成为 Git 历史记录的一部分 而不是在之后清理它们 参考此question https stackoverflow com
  • 如何将元组的元组转换为其元素的计数?

    我有这个tuple元组 TupleOfTuples Venue1 Name1 Venue1 Name2 Venue2 Name3 Venue3 Name4 Venue3 Name5 Venue3 Name6 我想将其转换以获得如下结果 Ou
  • 如何在 WPF 中使用线程的结果?

    不幸的是 线程和任务对我来说是一个很大的谜 必须在与 DependencyObject 相同的线程上创建 DependencySource 我正在努力避免用户界面冻结 我的方法是在线程中完成工作 然后使用线程的输出设置属性 我有一个基类Jo