Freigeben über


Observable.Window<TSource-Methode> (IObservable<TSource>, TimeSpan, TimeSpan, IScheduler)

Projiziert jedes Element einer beobachtbaren Sequenz in null oder mehr Fenster, die basierend auf Timinginformationen erstellt werden.

Namespace:System.Reactive.Linq
Versammlung: System.Reaktiv (in System.Reactive.dll)

Syntax

'Declaration
<ExtensionAttribute> _
Public Shared Function Window(Of TSource) ( _
    source As IObservable(Of TSource), _
    timeSpan As TimeSpan, _
    timeShift As TimeSpan, _
    scheduler As IScheduler _
) As IObservable(Of IObservable(Of TSource))
'Usage
Dim source As IObservable(Of TSource)
Dim timeSpan As TimeSpan
Dim timeShift As TimeSpan
Dim scheduler As IScheduler
Dim returnValue As IObservable(Of IObservable(Of TSource))

returnValue = source.Window(timeSpan, _
    timeShift, scheduler)
public static IObservable<IObservable<TSource>> Window<TSource>(
    this IObservable<TSource> source,
    TimeSpan timeSpan,
    TimeSpan timeShift,
    IScheduler scheduler
)
[ExtensionAttribute]
public:
generic<typename TSource>
static IObservable<IObservable<TSource>^>^ Window(
    IObservable<TSource>^ source, 
    TimeSpan timeSpan, 
    TimeSpan timeShift, 
    IScheduler^ scheduler
)
static member Window : 
        source:IObservable<'TSource> * 
        timeSpan:TimeSpan * 
        timeShift:TimeSpan * 
        scheduler:IScheduler -> IObservable<IObservable<'TSource>> 
JScript does not support generic types and methods.

Typparameter

  • TSource
    Der Quellentyp.

Parameter

  • Timeshift
    Typ: System.TimeSpan
    Das Intervall zwischen der Erstellung aufeinanderfolgender Fenster.

Rückgabewert

Typ: System.IObservable<IObservable<TSource>>
Eine beobachtbare Sequenz von Fenstern.

Hinweis zur Verwendung

In Visual Basic und C# können Sie diese Methode als instance-Methode für jedes Objekt vom Typ IObservable<TSource> aufrufen. Bei Verwendung der Syntax für Instanzenmethoden lassen Sie den ersten Parameter aus. Weitere Informationen finden Sie unter oder .

Bemerkungen

Der Window-Operator unterbricht eine Quellsequenz in gepufferte Teilmengen wie eine Fensteransicht der Sequenz. Der timeSpan-Parameter steuert, wie viele Elemente in jedem Fensterpuffer platziert werden, indem das Fenster für die Dauer dieser Zeitspanne geöffnet bleibt. Der timeShift-Parameter gibt die Zeitspanne vom Anfang des vorherigen Fensters an, die abgeschlossen werden muss, bevor ein neues Fenster geöffnet wird. Dadurch wird die Ansicht basierend auf der Dauer dieser Zeitspanne in die Sequenz verschoben. Der Scheduler-Parameter steuert, wo die Timer ausgeführt werden sollen, die den timeSpan- und timeShift-Parametern zugeordnet sind.

Beispiele

In diesem Beispiel wird der Window-Operator verwendet, um ganzzahlige Sequenzen aus dem Interval-Operator jede Sekunde zu beobachten. Jede ganzzahlige Sequenz wird über ein Fenster angezeigt. Jedes Fenster wird 2,5 Sekunden lang geöffnet und dann geschlossen. Der timeShift-Parameter ist auf 5 Sekunden festgelegt. Dies bedeutet, dass alle 5 Sekunden ab dem Zeitpunkt, zu dem jedes vorherige Fenster geöffnet wurde, ein neues Fenster geöffnet wird. Das Endergebnis ist, dass ein Fenster für 2,5 Sekunden geöffnet und dann 2,5 Sekunden geschlossen ist. Die Sequenzen enthalten also zwei ganze Zahlen, beginnend mit jeder 5. ganzzahligen Zahl, die mit 0 beginnen.

using System;
using System.Reactive.Linq;
using System.Reactive.Concurrency;

namespace Example
{
  class Program
  {
    static void Main()
    {
      //**********************************************************************************************//
      //*** The mainSequence produces a new long integer from the Interval operator every sec but  ***//
      //*** this sequence is broken up by the Window operator into subsets like a windowed         ***//
      //*** view of the sequence.                                                                  ***//
      //***                                                                                        ***//
      //*** The timeSpan parameter controls how many items are placed in each window buffer by     ***//
      //*** keeping the window open for the duration of the time span.                             ***//
      //***                                                                                        ***//
      //*** The timeShift parameter indicates the time span which must complete before a new       ***//
      //*** window opens. This shifts the view into the sequence based on the duration of the time ***//
      //*** span.                                                                                  ***//
      //***                                                                                        ***//
      //*** The ThreadPool scheduler is used to run the timers on a .NET thread pool thread. This  ***//
      //*** prevents the main thread from being blocked so pressing enter can exit the example.    ***//
      //***                                                                                        ***//
      //*** In this example each window will be open for 2.5 seconds. This will allow each window  ***//
      //*** to hold some items from the sequence starting with the first item (0). Then the        ***//
      //*** timeShift parameter shifts the next window opening by 5 seconds from the beginning of  ***//
      //*** the previous window. The result is that a window is open for 2.5 seconds then closed   ***//
      //*** for 2.5 seconds.                                                                       ***//
      //**********************************************************************************************//

      var mainSequence = Observable.Interval(TimeSpan.FromSeconds(1));

      TimeSpan timeSpan = TimeSpan.FromSeconds(2.5);
      TimeSpan timeShift = TimeSpan.FromSeconds(5);
      var seqWindowed = mainSequence.Window(timeSpan, timeShift, Scheduler.ThreadPool);


      //*********************************************************************************************//
      //*** A subscription to seqWindowed will provide a new IObservable<long> for some items in  ***//
      //*** the main sequence starting with the first item. Then we will receive a new observable ***//
      //*** for every window.                                                                     ***//
      //***                                                                                       ***//
      //*** Create a subscription to each window into the main sequence and list the values.      ***//
      //*********************************************************************************************//

      Console.WriteLine("Creating the subscription. Press ENTER to exit...\n");
      seqWindowed.Subscribe(seqWindow =>
      {
        Console.WriteLine("\nA new window into the main sequence has been opened\n");

        seqWindow.Subscribe(x =>
        {
          Console.WriteLine("Integer : {0}", x);
        });
      });

      Console.ReadLine();
    }
  }
}

Die folgende Ausgabe wurde vom Beispielcode generiert.

Creating the subscription. Press ENTER to exit...


A new window into the main sequence has been opened

Integer : 0
Integer : 1

A new window into the main sequence has been opened

Integer : 5
Integer : 6

A new window into the main sequence has been opened

Integer : 10
Integer : 11

A new window into the main sequence has been opened

Integer : 15
Integer : 16

A new window into the main sequence has been opened

Integer : 20
Integer : 21

Weitere Informationen

Verweis

Beobachtbare Klasse

Fensterüberladung

System.Reactive.Linq-Namespace