Observable.Window<TSource> Yöntemi (IObservable<TSource>, TimeSpan, TimeSpan, IScheduler)
Gözlemlenebilir bir dizideki her öğeyi zamanlama bilgilerine göre oluşturulan sıfır veya daha fazla pencereye projeler.
Ad Alanı:System.Reactive.Linq
Derleme: System.Reactive (System.Reactive.dll içinde)
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.
Tür Parametreleri
- Tsource
Kaynak türü.
Parametreler
- kaynak
Tür: System.IObservable<TSource>
Pencerelerin üretilmesi için kaynak dizisi.
- Timespan
Tür: System.TimeSpan
Her pencerenin uzunluğu.
- Timeshift
Tür: System.TimeSpan
Ardışık pencerelerin oluşturulması arasındaki aralık.
- scheduler
Tür: System.Reactive.Concurrency.IScheduler
Pencere zamanlayıcılarının çalıştırılması için zamanlayıcı.
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
Window işleci, bir kaynak diziyi arabelleğe alınan alt kümelere böler. Örneğin, sıranın pencereli görünümü. timeSpan parametresi, pencereyi bu süre boyunca açık tutarak her pencere arabelleğine kaç öğe yerleştirildiğini denetler. timeShift parametresi, yeni bir pencere açılmadan önce tamamlanması gereken bir önceki pencerenin başından itibaren zaman aralığını gösterir. Bu, görünümü söz konusu zaman aralığının süresine göre diziye kaydırıyor. Zamanlayıcı parametresi, timeSpan ve timeShift parametreleriyle ilişkili zamanlayıcıların nerede çalıştırılacaklarını denetler.
Örnekler
Bu örnekte Window işleci, Aralık işlecinden her saniyede bir tamsayı dizilerini gözlemlemek için kullanılır. Her tamsayı dizisi bir pencere üzerinden görüntülenir. Her pencere 2,5 saniye açık kalır ve ardından kapatılır. timeShift parametresi 5 saniye olarak ayarlanır. Bu, önceki her pencere açıldığından itibaren her 5 saniyede bir yeni bir pencere açılacağı anlamına gelir. Sonuç olarak, 2,5 saniye açık ve ardından 2,5 saniye kapalı bir penceremiz vardır. Bu nedenle sıralar, 0 ile başlayan her 5. tamsayıdan başlayarak iki tamsayı içerir.
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();
}
}
}
Aşağıdaki çıkış örnek kod tarafından oluşturulmuştur.
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