Sdílet prostřednictvím


Observable.Window<TSource, TWindowClosing> – metoda (IObservable<TSource>, Func<IObservable<TWindowClosing>>)

Promítá každý prvek pozorovatelné sekvence do po sobě jdoucích nepřekrývajících se oken.

Obor názvů:System.Reactive.Linq
Sestavení: System.Reactive (v System.Reactive.dll)

Syntax

'Declaration
<ExtensionAttribute> _
Public Shared Function Window(Of TSource, TWindowClosing) ( _
    source As IObservable(Of TSource), _
    windowClosingSelector As Func(Of IObservable(Of TWindowClosing)) _
) As IObservable(Of IObservable(Of TSource))
'Usage
Dim source As IObservable(Of TSource)
Dim windowClosingSelector As Func(Of IObservable(Of TWindowClosing))
Dim returnValue As IObservable(Of IObservable(Of TSource))

returnValue = source.Window(windowClosingSelector)
public static IObservable<IObservable<TSource>> Window<TSource, TWindowClosing>(
    this IObservable<TSource> source,
    Func<IObservable<TWindowClosing>> windowClosingSelector
)
[ExtensionAttribute]
public:
generic<typename TSource, typename TWindowClosing>
static IObservable<IObservable<TSource>^>^ Window(
    IObservable<TSource>^ source, 
    Func<IObservable<TWindowClosing>^>^ windowClosingSelector
)
static member Window : 
        source:IObservable<'TSource> * 
        windowClosingSelector:Func<IObservable<'TWindowClosing>> -> IObservable<IObservable<'TSource>> 
JScript does not support generic types and methods.

Parametry typu

  • Tsource
    Typ zdroje.
  • TWindowClosing
    Typ zavírání okna

Parametry

  • windowClosingSelector
    Typ: System.Func<IObservable<TWindowClosing>>
    Vyvolá se funkce, která definuje hranice vytvářený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í pozorovatelnou sekvenci na po sobě jdoucí nepřekrývající se okna. Konec aktuálního okna a začátek dalšího okna je řízen pozorovatelnou sekvencí, která je výsledkem funkce windowClosingSelect , která je předána operátoru jako vstupní parametr. Operátor lze použít k seskupení sady událostí do okna. Například stavy transakce můžou být hlavní sekvencí, která se pozoruje. Mezi tyto stavy patří: Příprava, Připraveno, Aktivní a Potvrzeno/Přerušeno. Hlavní sekvence může obsahovat všechny tyto stavy, pokud se vyskytují v daném pořadí. Funkce windowClosingSelect může vrátit pozorovatelnou sekvenci, která vytváří pouze hodnotu ve stavu Potvrzeno nebo Přerušit. Tím by se zavřelo okno, které představovalo události transakcí pro konkrétní transakci.

Příklady

Následující jednoduchý příklad rozdělí posloupnost celých čísel na po sobě jdoucí nepřekrývající se okna. Konec aktuálního okna a začátek dalšího okna se řídí pozorovatelnou sekvencí celých čísel vygenerovaných operátorem Interval každých šest sekund. Vzhledem k tomu, že hlavní pozorovatelná sekvence vytváří položku každou sekundu, bude mít každé okno šest položek. Ukázkový kód zapíše každé okno celých čísel do okna konzoly spolu s časovým razítkem, které ukazuje, že nové okno je otevřeno každých šest sekund.

using System;
using System.Reactive.Linq;

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 time when each window stops and the next window starts is   ***//
      //*** controlled by the IObservable<TWindowClosing> named seqWindowControl. It is returned  ***//
      //*** by the lambda expression which is passed to the Window operator. In this case it      ***//
      //**  returns another IObservable<long> generated by the Interval operator. So whenever     ***//
      //*** seqWindowControl produces a item, the current window into the mainSequence stops and  ***//
      //*** a new window starts.                                                                  ***//
      //*********************************************************************************************//

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

      var seqWindowed = mainSequence.Window(() => 
      {
        var seqWindowControl = Observable.Interval(TimeSpan.FromSeconds(6));
        return seqWindowControl;
      });


      //*********************************************************************************************//
      //*** A subscription to seqWindowed will provide a new IObservable<long> every 6 secs.      ***//
      //***                                                                                       ***//
      //*** Create a subscription to each window into the main sequence and list the values along ***//
      //*** with the time the window was opened and the previous window was closed.               ***//
      //*********************************************************************************************//
      
      seqWindowed.Subscribe(seqWindow => 
      {
        Console.WriteLine("\nA new window into the main sequence has opened: {0}\n",DateTime.Now.ToString());
        seqWindow.Subscribe(x =>
        {
          Console.WriteLine("Integer : {0}", x);
        });
      });

      Console.ReadLine();
    }
  }
}

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

A new window into the main sequence has opened: 6/1/2011 8:48:43 PM

Integer : 0
Integer : 1
Integer : 2
Integer : 3
Integer : 4
Integer : 5

A new window into the main sequence has opened: 6/1/2011 8:48:49 PM

Integer : 6
Integer : 7
Integer : 8
Integer : 9
Integer : 10
Integer : 11

A new window into the main sequence has opened: 6/1/2011 8:48:55 PM

Integer : 12
Integer : 13
Integer : 14
Integer : 15
Integer : 16
Integer : 17

A new window into the main sequence has opened: 6/1/2011 8:49:02 PM

Integer : 18
Integer : 19
Integer : 20
Integer : 21
Integer : 22
Integer : 23

Viz také

Reference

Pozorovatelná třída

Přetížení okna

System.Reactive.Linq – obor názvů