Observable.Window<TSource, TWindowClosing> Yöntemi (IObservable<TSource>, Func<IObservable<TWindowClosing>>)
Gözlemlenebilir bir dizinin her bir öğesini ardışık örtüşmeyen pencerelere projeler.
Ad Alanı:System.Reactive.Linq
Derleme: System.Reactive (System.Reactive.dll içinde)
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.
Tür Parametreleri
- Tsource
Kaynak türü.
- TWindowClosing
Pencere kapatma türü.
Parametreler
- kaynak
Tür: System.IObservable<TSource>
Pencerelerin üzerinde üretilmesi için kaynak dizisi.
- windowClosingSelector
Tür: System.Func<IObservable<TWindowClosing>>
Oluşturulan pencerelerin sınırlarını tanımlamak için çağrılan bir işlev.
Dönüş Değeri
Tür: System.IObservable<IObservable<TSource>>
Gözlemlenebilir bir pencere dizisi.
Kullanım Notu
Visual Basic ve C# içinde, bu yöntemi IObservable<TSource> türündeki herhangi bir nesnede örnek yöntemi olarak çağırabilirsiniz. Bu yöntemi çağırmak için örnek yöntemi sözdizimini kullandığınızda, ilk parametreyi yok sayın. Daha fazla bilgi için bkz. veya .
Açıklamalar
Pencere işleci, gözlemlenebilir bir diziyi ardışık örtüşmeyen pencerelere böler. Geçerli pencerenin sonu ve sonraki pencerenin başlangıcı, işlecine giriş parametresi olarak geçirilen windowClosingSelect işlevinin sonucu olan gözlemlenebilir bir dizi tarafından denetlenir. işleci, bir dizi olayı bir pencerede gruplandırmak için kullanılabilir. Örneğin, bir işlemin durumları gözlemlenen ana dizi olabilir. Bu durumlar şunlar olabilir: Hazırlama, Hazırlama, Etkin ve Kabul Edildi/Durduruldu. Ana dizi, bu durumların tümünü içerebilir ve bunlar bu sırada gerçekleşir. windowClosingSelect işlevi yalnızca Kabul Edilen veya Durdurulan durumlarında değer üreten gözlemlenebilir bir dizi döndürebilir. Bu, belirli bir hareketin işlem olaylarını temsil eden pencereyi kapatır.
Örnekler
Aşağıdaki basit örnek, bir tamsayı dizisini ardışık örtüşmeyen pencerelere böler. Geçerli pencerenin sonu ve sonraki pencerenin başlangıcı, Aralık işleci tarafından altı saniyede bir üretilen gözlemlenebilir bir tamsayı dizisiyle denetlenir. Ana gözlemlenebilir dizi her saniye bir öğe ürettiğinden, her pencerede altı öğe olur. Örnek kod, her tamsayı penceresini konsol penceresine yazar ve yeni bir pencere gösteren bir zaman damgası altı saniyede bir açılır.
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();
}
}
}
Aşağıdaki çıkış örnek kod tarafından oluşturulmuştur.
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