1

我正在使用 Visual Studio 2010 Ultimate 来创建 WPF 应用程序(.net 4.0),并且我正在阅读来自复数的教程 for .NET Reactive Extensions Fundamentals

_http://www.pluralsight.com/training/Courses/TableOfContents/reactive-extensions

显示了一个 WPF 示例,其中在单击按钮时使用了一个简单的按钮和只读文本框,文本框的文本附加了使用 Enumerable linq 查询生成的数字。由于执行了异步任务,应用程序保持响应而不会死机。

应用程序添加了 System.CoreEx、System.Observable 和 System.Reactive 的引用

并假设一行代码就像

var query = from number in Enumerable.Range(1, 25) select number;

var observableQuery = query.ToObservable() // ToObservable() is not seen in intellisense

因为我无法找到并添加参考。

我试图在谷歌上搜索并安装

反应式扩展来自

http://www.microsoft.com/en-in/download/details.aspx?id=26649

http://msdn.microsoft.com/en-us/data/gg577610

但我无法找到所有 dll 文件。我在我的系统中找到了 System.Reactive

C:\Program Files (x86)\Microsoft Reactive Extensions SDK\v1.0.10621\Binaries.NETFramework\v4.0

在谷歌上搜索时,我在某处读到 System.CoreEx 现在包含在 System.Reactive 中,因此不需要其余的是 System.Observable ,但我无法找到。

那么我在哪里可以找到那个 dll 或者我需要安装什么来获得那个 dll。我什至尝试过nuget但找不到。

如果有人可以建议在哪里可以获得 System.Observable dll。

4

4 回答 4

1

由于版本的变化,我不得不面对问题,但最终在@Lee 的帮助和指导下我可以解决它。谢谢@李。我想把所有的东西都带到这里,这样可能对其他人有帮助。

这是 xaml 部分:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<StackPanel>
    <Button Name="Start" Click="Start_Click">Start</Button>
    <TextBox Name="Results" Height="250" VerticalScrollBarVisibility="Auto" IsReadOnly="True"/>
</StackPanel>

这是 .cs 文件编码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Threading;
using System.Reactive.Linq;
using System.Reactive.Concurrency;

namespace WpfApplication1
{
  /// <summary>
  /// Interaction logic for MainWindow.xaml
  /// </summary>
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
        InitializeComponent();
    }

    private static string StringWait(string str)
    {
        Thread.Sleep(10);
        return str;
    }

    private void Start_Click(object sender, RoutedEventArgs e)
    {
        var query = from number in Enumerable.Range(1, 10000000)
                    select StringWait(number.ToString());
        var observableQuery = query.ToObservable(Scheduler.Default);
        observableQuery.ObserveOn(Dispatcher).Subscribe(n => Results.AppendText
            (string.Format("{0}\n",n)));

    }
  }
}

最后是我需要的参考资料:

http://i49.tinypic.com/vp7sk7.jpg

于 2013-02-23T06:09:31.050 回答
0

在此处下载 Silverlight 工具包:然后添加对 System.Reactive.dll 的引用(默认情况下 - C:\Program Files\Microsoft SDKs\Silverlight\v3.0\Toolkit\Oct09\Bin)

于 2013-02-21T11:57:57.133 回答
0

ToObservable扩展方法在类中定义,该类System.Reactive.Linq.Observable位于System.Reactive.Linq.dll. 因此,您需要添加对 System.Reactive.Linq 程序集的引用,并在源文件中添加一个

using System.Reactive.Linq;

指示。

编辑:针对您的评论,您似乎想要执行以下操作:

IObservable<string> observableQuery = query.ToObservable();
observableQuery.subscribe(Results.AppendText);

TextBoxBase.AppendText可以转换为,并且在ObservableExtension.SubscribeAction<string>中定义了一个扩展方法,它允许订阅的方法。Action<string>IObservable<T>OnNext

要使用它,您需要添加一个引用System.Reactive.Core.dll并添加一个

using System;

源文件中的指令。

于 2013-02-21T12:42:02.360 回答
0

如果您使用的是最新的 .net 框架,只需尝试安装此Reactive Extensions (Rx) nuget 包,您应该可以启动并运行。

于 2017-02-04T03:20:20.897 回答