ReactiveUI:无法让代码在后台线程上运行

2024-03-20

只是涉足 RxUI 并尝试让一个简单的例子工作......

我有一个带有列表框和按钮的 WPF 视图。 当我按下按钮 (Go) 时,我想在后台线程上运行一个方法,并将其生成的结果添加到列表框中。 我正在记录线程 ID 以检查正在执行的内容。 问题是我总是看到所有操作都发生在同一个线程上。 我尝试在 CreateAsyncObservable 上指定 Scheduler.Default 但没有任何内容添加到 ListBox 中。

public class MainViewModel : ReactiveObject
{
    public MainViewModel()
    {
        Results = new ReactiveList<string>();

        var seq = ReactiveCommand.CreateAsyncObservable(_ => GetAsyncResults());

        seq.ObserveOn(Scheduler.CurrentThread);

        seq.Subscribe(s =>
        {
            Results.Add(string.Format("{0} thread {1}", s, Thread.CurrentThread.ManagedThreadId));
        });

        Results.Add(string.Format("main thread {0}", Thread.CurrentThread.ManagedThreadId));

        Go = ReactiveCommand.Create();
        Go.Subscribe(_ => seq.Execute(null));
    }

    public static IObservable<string> GetAsyncResults()
    {
        Thread.Sleep(1000);
        return (new[] {"Rod", "Jane", "Freddy"}).ToObservable();
    }

    private readonly ObservableAsPropertyHelper<List<string>> _strings;
    public List<string> Strings {get { return _strings.Value; }}

    public ReactiveCommand<object> Go { get; protected set; }

    public ReactiveList<string> Results { get; set; }
}

在您提出请求之前,Rx 不会切换线程,而 GetAsyncResults 只是同步返回项目列表。您需要指定RxApp.TaskpoolScheduler将内容移至后台线程。

public static IObservable<string> GetAsyncResults()
{
    return (new[] {"Rod", "Jane", "Freddy"}).ToObservable(RxApp.TaskpoolScheduler);
}

seq.ObserveOn(Scheduler.CurrentThread);

你没有使用它的返回值,所以它没有做任何事情

Go = ReactiveCommand.Create();

为什么要在这里创建两个单独的命令?

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

ReactiveUI:无法让代码在后台线程上运行 的相关文章

  • 从 WPF 打印/报告的最佳方法是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Dispatcher.BeginInvoke() 未异步运行

    这是我想做的事情的简化版本 onClick abutton a aNewMethod 将异步运行以保持 UI 响应 就是这样 我读过一些答案 这是我能想到的 private async void button Click object se
  • Window.AllowsTransparent 设置为 true 时 wpf 中的运行时错误

    当我设置时 我在运行时抛出异常AllowsTransparency True 我得到一个例外 说WindowStyle不能设置为None if AllowsTransparency设置为 true 即使我明确地说WindowStyle被设定
  • 了解用户是否更改了 DataGrid 中的数据的最佳方法是什么?

    我想知道每次用户修改 WPF DataGrid 中的数据时 我可以使用一个事件来做到这一点吗 或者我可以用来覆盖全套数据更改 添加行 删除行 修改行等 的最小事件集是什么 我知道这可能超出了你的要求 但是一旦你这样做了 就很难回头了 无论您
  • 在 WPF 中设置控件内容比将类绑定到选择器控件更好的方法是什么?

    我有一个分为 4 个面板的应用程序 有一个主绘图区域 一个顶部面板 一个左侧菜单面板和一个右侧子菜单面板 如下图所示 子菜单的内容由选择哪个顶部菜单按钮决定 子菜单的内容由选择哪个右侧菜单决定 例如 这是单击 网络设计和测试 扩展器上的第一
  • 数据绑定的 IntelliSense 不起作用

    经过几个小时尝试调试由错误的属性引起的数据绑定问题Binding扩大 一旦我注意到这个错误 我就会意识到如果 IntelliSense 可用 我可能一开始就不会犯这个错误 作为一个习惯在错误输入名称时出现错误 警告的 Visual Stud
  • 当 ToString() 具有协作对象时,为什么 WPF 数据绑定不显示文本?

    在一个简单的形式中 我绑定到许多不同的对象 有些放在列表框中 有些放在列表框中 有些放在列表框中 一些在文本块中 其中一些对象具有协作对象 在这些对象上ToString 方法在执行其工作时调用 通常是某种格式化程序 当我单步执行代码时 我发
  • 在辅助监视器中创建 WPF 窗口时遇到问题

    我正在努力在应用程序中实现一些类似 Chrome 的选项卡功能 但在正确生成新实例时遇到一些问题 我已经对各种解决方案进行了大量搜索和迭代 但尚未能够在第二台显示器上生成新窗口 这是使用线程 打开文件 将当前选项卡拖至其他显示器 新的应用程
  • 在 Datagrid wpf 上对数据进行分组

    我想使用包含组名称并包含所有 ClassMate 名称的扩展器重新组合我的数据 这是我的班级组 public class Group public List
  • WPF:什么会导致 ComboBox 无法虚拟化?

    这是我的组合框 它似乎没有虚拟化 但我不明白为什么 您知道有什么会导致这种情况吗
  • 如何在MVVM中实现appSettings

    我正在尝试摆脱我使用的警告appSettings在 WPF 项目中 应用程序配置
  • 在 MVVM 中哪里可以捕获异常?

    我的视图模型类有一个连接到服务的方法 不确定这是否是一个好的实践 或者视图模型是否应该是严格的属性和属性更改机制 当然 我想在连接或断开连接时处理任何可能的 WCF 异常 让我们使用未找到端点作为示例 考虑到这是一个我想引起用户注意的异常
  • 从 WPF 绑定列表框中删除项目

    我有一个带有 ListBox 称为 listMyItems 的 WPF 应用程序 它已成功绑定到我创建的 MyItems 类 我有一个名为 currentMyItems 的 MyItems 列表 然后将其作为 ItemSource 分配给
  • WPF 网格布局

    是否可以在 WPF 中使用 Grid 来设计类似的东西 设计列很容易 但是行呢 或者有没有更好的解决方案 比如另一个容器 将每个矩形想象为模块 GroupBox 创建一个包含两列的外部网格 在此网格中 放置另外两个网格 每列一个 这将导致所
  • WPF DataGridTemplateColumn 标题绑定不起作用

    我将 DataGrid 与一些手动创建的 DataGridTemplateColumns 一起使用 这是工作中的代码片段
  • WPF 窗口关闭后不会释放内存

    我创建了一个测试代码 private void Application Startup 1 object sender StartupEventArgs e ShutdownMode System Windows ShutdownMode
  • WPF 无法从 url 检索 WebP 图像?

    我无法从网址检索图像 以前 在设置 HttpClient 标头之前 我根本无法连接到该站点 我可以从其他来源检索图像 但不能从这个特定来源检索图像 检索图像的代码 var img new BitmapImage img BeginInit
  • 弹簧质量系统的阻尼效果(或者这是 ElasticEase?)

    我试图在代码中模拟动画效果 几乎任何语言都可以 因为它看起来是数学而不是语言 本质上 它是质量弹簧系统的仿真 我一直在研究 WPF Silverlight 的ElasticEase这似乎与我正在寻找的非常接近 但又不完全一样 首先 这就是我
  • WPF ComboBox 中具有本地化名称的枚举

    我有一个列出枚举的组合框 enum StatusEnum Open 1 Closed 2 InProgress 3
  • SQL Server CE 不兼容的数据库版本

    我有一个 SQL Server CE 4 0 数据库 sdf文件 当我尝试从我的应用程序 WPF 对数据库进行查询时 出现以下错误 数据库版本不兼容 如果这是兼容文件 请运行修复 其他情况请参考文档 数据库版本 4000000 请求的版本

随机推荐