Sdílet prostřednictvím


Observable.Window<TSource> – metoda (IObservable<TSource>, TimeSpan, TimeSpan, IScheduler)

Promítá každý prvek pozorovatelné sekvence do nula nebo více oken, která jsou vytvořena na základě informací o načasování.

Obor názvů:System.Reactive.Linq
Sestavení: System.Reactive (v 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.

Parametry typu

  • Tsource
    Typ zdroje.

Parametry

  • Timeshift
    Typ: System.TimeSpan
    Interval mezi vytvořením po sobě jdoucích oken.

Návratová hodnota

Typ: System.IObservable<IObservable<TSource>>
Pozorovatelná posloupnost oken.

Poznámka k využití

V jazyce Visual Basic a C# můžete tuto metodu volat jako metodu instance u libovolného objektu typu IObservable<TSource>. Pokud k volání této metody použijete syntaxi metody instance, vynechejte první parametr. Další informace naleznete v tématech a .

Poznámky

Operátor Window rozdělí zdrojovou sekvenci na podmnožinu s vyrovnávací pamětí, jako je zobrazení sekvence v okně. Parametr timeSpan řídí, kolik položek se umístí do každé vyrovnávací paměti okna, a to tak, že ponechá okno otevřené po dobu trvání tohoto časového rozsahu. Parametr timeShift označuje časový rozsah od začátku předchozího okna, který se musí dokončit před otevřením nového okna. Tím se zobrazení přesune do posloupnosti na základě doby trvání daného časového rozsahu. Parametr scheduleru určuje, kde se mají spustit časovače přidružené k parametrům timeSpan a timeShift.

Příklady

V tomto příkladu se operátor Window používá k pozorování celých sekvencí z operátoru Interval každou sekundu. Každá celočíselná sekvence je zobrazena v okně. Každé okno bude otevřeno po dobu 2,5 sekundy a pak se zavře. Parametr timeShift je nastavený na 5 sekund . To znamená, že nové okno se otevře každých 5 sekund od otevření každého předchozího okna. Konečným výsledkem je, že máme okno otevřené na 2,5 sekundy a pak zavřeme na 2,5 sekundy. Sekvence tedy budou obsahovat dvě celá čísla počínaje každým 5. číslem počínaje číslem 0.

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();
    }
  }
}

Ukázkový kód vygeneroval následující výstup.

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

Viz také

Reference

Pozorovatelná třída

Přetížení okna

System.Reactive.Linq – obor názvů