From 79c3a109144194872e82a06c03f9333fc1d8c935 Mon Sep 17 00:00:00 2001 From: Thargoids Date: Thu, 26 Jan 2017 17:25:31 +0000 Subject: [PATCH 01/96] Remove preview on entering 0 --- .../ViewModels/CircleViewModel.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs index e6fd6fd1..6d380539 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs @@ -305,6 +305,7 @@ public override string DistanceString } else { + UpdateFeedbackWithGeoCircle(); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } } @@ -403,7 +404,7 @@ internal override void OnMouseMoveEvent(object obj) private void UpdateFeedbackWithGeoCircle() { - if (Point1 == null || Distance <= 0.0) + if (Point1 == null) return; var construct = new Polyline() as IConstructGeodetic; From c5823adafe21c1606cbcf865409b9249ff31e192 Mon Sep 17 00:00:00 2001 From: Natalie Feuerstein Date: Thu, 26 Jan 2017 16:20:55 -0700 Subject: [PATCH 02/96] Updated Tags Added Military-Tools-for-ArcGIS --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6b86da74..37dad27c 100644 --- a/README.md +++ b/README.md @@ -205,5 +205,5 @@ limitations under the License. A copy of the license is available in the repository's [license.txt](license.txt) file. -[](Esri Tags: Military Analyst Defense ArcGIS ArcObjects .NET WPF ArcGISSolutions ArcMap ArcPro Add-In) +[](Esri Tags: Military Analyst Defense ArcGIS ArcObjects .NET WPF ArcGISSolutions ArcMap ArcPro Add-In Military-Tools-for-ArcGIS) [](Esri Language: C#) From ec2c3bd41806cff6d1e16ccce1e3ae6640d58847 Mon Sep 17 00:00:00 2001 From: Thargoids Date: Fri, 27 Jan 2017 12:23:45 +0000 Subject: [PATCH 03/96] Updates properly on adding 0 but not clearing --- .../ViewModels/CircleViewModel.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs index 6d380539..fedfa564 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs @@ -142,7 +142,10 @@ public double TravelTime set { if (value < 0.0) + { + UpdateFeedbackWithGeoCircle(); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); + } travelTime = value; From ad345521b6da920144c22dd8e4bcf1837d65b7fd Mon Sep 17 00:00:00 2001 From: Thargoids Date: Fri, 27 Jan 2017 12:44:55 +0000 Subject: [PATCH 04/96] Checks value angle not > 360 --- .../ViewModels/LinesViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs index da469bed..debe0d83 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs @@ -129,7 +129,7 @@ public double? Azimuth get { return azimuth; } set { - if (value < 0.0) + if (value < 0.0 || value > 360) throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); azimuth = value; From 93bb24a24fdd6b3c66856446bd094efd116d5a0f Mon Sep 17 00:00:00 2001 From: Thargoids Date: Fri, 27 Jan 2017 13:02:02 +0000 Subject: [PATCH 05/96] Trim superfluous precision --- .../ViewModels/EllipseViewModel.cs | 7 ++-- .../ViewModels/LinesViewModel.cs | 6 ++-- .../ViewModels/TabBaseViewModel.cs | 36 ++++++++++++++++++- 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs index 7ea3a63c..2f36244a 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs @@ -104,7 +104,7 @@ public double MinorAxisDistance if (value < 0.0) throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); - minorAxisDistance = value; + minorAxisDistance = TrimPrecision(value); UpdateFeedbackWithEllipse(); @@ -162,7 +162,7 @@ public double MajorAxisDistance if (value < 0.0) throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); - majorAxisDistance = value; + majorAxisDistance = TrimPrecision(value); Point2 = UpdateFeedback(Point1, MajorAxisDistance); @@ -312,8 +312,9 @@ internal override void OnMouseMoveEvent(object obj) var polyline = CreateGeodeticLine(Point1, point); // get major distance from polyline MajorAxisDistance = GetGeodeticLengthFromPolyline(polyline); + // update bearing - Azimuth = GetAzimuth(polyline); + Azimuth = Math.Round(GetAzimuth(polyline), 2); // update feedback UpdateFeedbackWithEllipse(false); } diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs index da469bed..81d12cca 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs @@ -109,7 +109,7 @@ public override double Distance if (value < 0.0) throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); - distance = value; + distance = TrimPrecision(value); RaisePropertyChanged(() => Distance); if(LineFromType == LineFromTypes.BearingAndDistance) @@ -318,12 +318,12 @@ private double GetAngleDegrees(double angle) if (LineAzimuthType == AzimuthTypes.Degrees) { - return bearing; + return Math.Round(bearing, 2); } if (LineAzimuthType == AzimuthTypes.Mils) { - return bearing * 17.777777778; + return Math.Round(bearing * 17.777777778, 2); } return 0.0; diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs index 55c2681c..fa204d51 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs @@ -1162,6 +1162,36 @@ internal double ConvertFromTo(DistanceTypes fromType, DistanceTypes toType, doub return result; } + // Overload for calling from another class where lineDistanceType is not available + protected double TrimPrecision(double inputDistance) + { + return TrimPrecision(inputDistance, lineDistanceType); + } + + // Remove superfluous precision with + protected double TrimPrecision(double inputDistance, DistanceTypes lineDistanceType_param) + { + double returnDistance = 0; + // For smaller units assume no fraction is required + // For larger units provide ten thousandth i.e. 4 decimal places, probably more than sufficient + switch (lineDistanceType_param) + { + case DistanceTypes.Kilometers: + case DistanceTypes.Miles: + case DistanceTypes.NauticalMile: + returnDistance = Math.Round(inputDistance, 4); + break; + case DistanceTypes.Meters: + case DistanceTypes.Feet: + case DistanceTypes.Yards: + returnDistance = Math.Round(inputDistance, 0); + break; + default: + break; + } + return returnDistance; + } + private esriUnits GetEsriUnit(DistanceTypes distanceType) { esriUnits unit = esriUnits.esriMeters; @@ -1233,6 +1263,7 @@ internal double GetGeodeticLengthFromPolyline(IPolyline polyline) return geodeticLength; } + /// /// Gets the distance/lenght of a polyline /// @@ -1244,8 +1275,11 @@ internal void UpdateDistance(IGeometry geometry) if (polyline == null) return; - Distance = GetGeodeticLengthFromPolyline(polyline); + double rawDistance = GetGeodeticLengthFromPolyline(polyline); + // Round the superfluous precision appropriately to unit + Distance = TrimPrecision(rawDistance, lineDistanceType); } + /// /// Handler for the mouse move event /// When the mouse moves accross the map, IPoints are returned to aid in updating feedback to user From 482ffaf8f589bcbef4119445e69a58b86fe38ed4 Mon Sep 17 00:00:00 2001 From: Chris Moore Date: Fri, 27 Jan 2017 16:40:24 -0500 Subject: [PATCH 06/96] Remove nuget+convert Reactive to regular dependency Removed nuget because it complicated/broke building this in the single addin --- .../DistanceAndDirection/.nuget/NuGet.Config | 6 - .../DistanceAndDirection/.nuget/NuGet.targets | 144 - ...cMapAddinDistanceAndDirection.Tests.csproj | 4 +- .../ReactiveExtensions/LICENSE.txt | 16 + .../net45/System.Reactive.Core.XML | 2878 +++++ .../net45/System.Reactive.Core.dll | Bin 0 -> 114896 bytes .../net45/System.Reactive.Interfaces.XML | 336 + .../net45/System.Reactive.Interfaces.dll | Bin 0 -> 24272 bytes .../net45/System.Reactive.Linq.XML | 10779 ++++++++++++++++ .../net45/System.Reactive.Linq.dll | Bin 0 -> 708816 bytes .../System.Reactive.PlatformServices.XML | 378 + .../System.Reactive.PlatformServices.dll | Bin 0 -> 38600 bytes .../DistanceAndDirection.sln | 7 - ...AppDistanceAndDirectionModule.Tests.csproj | 18 +- .../ProAppDistanceAndDirectionModule.csproj | 26 +- .../packages.config | 8 - 16 files changed, 14407 insertions(+), 193 deletions(-) delete mode 100644 source/DistanceAndDirection/.nuget/NuGet.Config delete mode 100644 source/DistanceAndDirection/.nuget/NuGet.targets create mode 100644 source/DistanceAndDirection/Dependencies/ReactiveExtensions/LICENSE.txt create mode 100644 source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Core.XML create mode 100644 source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Core.dll create mode 100644 source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Interfaces.XML create mode 100644 source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Interfaces.dll create mode 100644 source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Linq.XML create mode 100644 source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Linq.dll create mode 100644 source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.PlatformServices.XML create mode 100644 source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.PlatformServices.dll delete mode 100644 source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/packages.config diff --git a/source/DistanceAndDirection/.nuget/NuGet.Config b/source/DistanceAndDirection/.nuget/NuGet.Config deleted file mode 100644 index 67f8ea04..00000000 --- a/source/DistanceAndDirection/.nuget/NuGet.Config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/source/DistanceAndDirection/.nuget/NuGet.targets b/source/DistanceAndDirection/.nuget/NuGet.targets deleted file mode 100644 index 55c01f26..00000000 --- a/source/DistanceAndDirection/.nuget/NuGet.targets +++ /dev/null @@ -1,144 +0,0 @@ - - - - $(MSBuildProjectDirectory)\..\ - - - false - - - false - - - true - - - true - - - - - - - - - - - $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) - - - - - $(SolutionDir).nuget - - - - $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName.Replace(' ', '_')).config - $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config - - - - $(MSBuildProjectDirectory)\packages.config - $(PackagesProjectConfig) - - - - - $(NuGetToolsPath)\NuGet.exe - @(PackageSource) - - "$(NuGetExePath)" - mono --runtime=v4.0.30319 "$(NuGetExePath)" - - $(TargetDir.Trim('\\')) - - -RequireConsent - -NonInteractive - - "$(SolutionDir) " - "$(SolutionDir)" - - - $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir) - $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols - - - - RestorePackages; - $(BuildDependsOn); - - - - - $(BuildDependsOn); - BuildPackage; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirection.Tests.csproj b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirection.Tests.csproj index 70211eaa..30b9559d 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirection.Tests.csproj +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirection.Tests.csproj @@ -43,7 +43,9 @@ False False - + + False + diff --git a/source/DistanceAndDirection/Dependencies/ReactiveExtensions/LICENSE.txt b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/LICENSE.txt new file mode 100644 index 00000000..9dd91c5c --- /dev/null +++ b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/LICENSE.txt @@ -0,0 +1,16 @@ +Copyright (c) .NET Foundation and Contributors +All Rights Reserved + +Licensed under the Apache License, Version 2.0 (the "License"); you +may not use this file except in compliance with the License. You may +obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied. See the License for the specific language governing permissions +and limitations under the License. + +See: https://github.com/Reactive-Extensions/Rx.NET \ No newline at end of file diff --git a/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Core.XML b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Core.XML new file mode 100644 index 00000000..ed2783c4 --- /dev/null +++ b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Core.XML @@ -0,0 +1,2878 @@ + + + + System.Reactive.Core + + + + + The System.Reactive.PlatformServices namespace contains interfaces and classes used by the runtime infrastructure of Reactive Extensions. + Those are not intended to be used directly from user code and are subject to change in future releases of the product. + + + + + Provides a set of static methods for subscribing delegates to observables. + + + + + Subscribes to the observable sequence without specifying any handlers. + This method can be used to evaluate the observable sequence for its side-effects only. + + The type of the elements in the source sequence. + Observable sequence to subscribe to. + IDisposable object used to unsubscribe from the observable sequence. + is null. + + + + Subscribes an element handler to an observable sequence. + + The type of the elements in the source sequence. + Observable sequence to subscribe to. + Action to invoke for each element in the observable sequence. + IDisposable object used to unsubscribe from the observable sequence. + or is null. + + + + Subscribes an element handler and an exception handler to an observable sequence. + + The type of the elements in the source sequence. + Observable sequence to subscribe to. + Action to invoke for each element in the observable sequence. + Action to invoke upon exceptional termination of the observable sequence. + IDisposable object used to unsubscribe from the observable sequence. + or or is null. + + + + Subscribes an element handler and a completion handler to an observable sequence. + + The type of the elements in the source sequence. + Observable sequence to subscribe to. + Action to invoke for each element in the observable sequence. + Action to invoke upon graceful termination of the observable sequence. + IDisposable object used to unsubscribe from the observable sequence. + or or is null. + + + + Subscribes an element handler, an exception handler, and a completion handler to an observable sequence. + + The type of the elements in the source sequence. + Observable sequence to subscribe to. + Action to invoke for each element in the observable sequence. + Action to invoke upon exceptional termination of the observable sequence. + Action to invoke upon graceful termination of the observable sequence. + IDisposable object used to unsubscribe from the observable sequence. + or or or is null. + + + + Subscribes an observer to an observable sequence, using a CancellationToken to support unsubscription. + + The type of the elements in the source sequence. + Observable sequence to subscribe to. + Observer to subscribe to the sequence. + CancellationToken that can be signaled to unsubscribe from the source sequence. + or is null. + + + + Subscribes to the observable sequence without specifying any handlers, using a CancellationToken to support unsubscription. + This method can be used to evaluate the observable sequence for its side-effects only. + + The type of the elements in the source sequence. + Observable sequence to subscribe to. + CancellationToken that can be signaled to unsubscribe from the source sequence. + is null. + + + + Subscribes an element handler to an observable sequence, using a CancellationToken to support unsubscription. + + The type of the elements in the source sequence. + Observable sequence to subscribe to. + Action to invoke for each element in the observable sequence. + CancellationToken that can be signaled to unsubscribe from the source sequence. + or is null. + + + + Subscribes an element handler and an exception handler to an observable sequence, using a CancellationToken to support unsubscription. + + The type of the elements in the source sequence. + Observable sequence to subscribe to. + Action to invoke for each element in the observable sequence. + Action to invoke upon exceptional termination of the observable sequence. + CancellationToken that can be signaled to unsubscribe from the source sequence. + or or is null. + + + + Subscribes an element handler and a completion handler to an observable sequence, using a CancellationToken to support unsubscription. + + The type of the elements in the source sequence. + Observable sequence to subscribe to. + Action to invoke for each element in the observable sequence. + Action to invoke upon graceful termination of the observable sequence. + CancellationToken that can be signaled to unsubscribe from the source sequence. + or or is null. + + + + Subscribes an element handler, an exception handler, and a completion handler to an observable sequence, using a CancellationToken to support unsubscription. + + The type of the elements in the source sequence. + Observable sequence to subscribe to. + Action to invoke for each element in the observable sequence. + Action to invoke upon exceptional termination of the observable sequence. + Action to invoke upon graceful termination of the observable sequence. + CancellationToken that can be signaled to unsubscribe from the source sequence. + or or or is null. + + + + Subscribes to the specified source, re-routing synchronous exceptions during invocation of the Subscribe method to the observer's OnError channel. + This method is typically used when writing query operators. + + The type of the elements in the source sequence. + Observable sequence to subscribe to. + Observer that will be passed to the observable sequence, and that will be used for exception propagation. + IDisposable object used to unsubscribe from the observable sequence. + or is null. + + + + Provides a set of static methods for creating observers. + + + + + Creates an observer from a notification callback. + + The type of the elements received by the observer. + Action that handles a notification. + The observer object that invokes the specified handler using a notification corresponding to each message it receives. + is null. + + + + Creates a notification callback from an observer. + + The type of the elements received by the observer. + Observer object. + The action that forwards its input notification to the underlying observer. + is null. + + + + Creates an observer from the specified OnNext action. + + The type of the elements received by the observer. + Observer's OnNext action implementation. + The observer object implemented using the given actions. + is null. + + + + Creates an observer from the specified OnNext and OnError actions. + + The type of the elements received by the observer. + Observer's OnNext action implementation. + Observer's OnError action implementation. + The observer object implemented using the given actions. + or is null. + + + + Creates an observer from the specified OnNext and OnCompleted actions. + + The type of the elements received by the observer. + Observer's OnNext action implementation. + Observer's OnCompleted action implementation. + The observer object implemented using the given actions. + or is null. + + + + Creates an observer from the specified OnNext, OnError, and OnCompleted actions. + + The type of the elements received by the observer. + Observer's OnNext action implementation. + Observer's OnError action implementation. + Observer's OnCompleted action implementation. + The observer object implemented using the given actions. + or or is null. + + + + Hides the identity of an observer. + + The type of the elements received by the source observer. + An observer whose identity to hide. + An observer that hides the identity of the specified observer. + is null. + + + + Checks access to the observer for grammar violations. This includes checking for multiple OnError or OnCompleted calls, as well as reentrancy in any of the observer methods. + If a violation is detected, an InvalidOperationException is thrown from the offending observer method call. + + The type of the elements received by the source observer. + The observer whose callback invocations should be checked for grammar violations. + An observer that checks callbacks invocations against the observer grammar and, if the checks pass, forwards those to the specified observer. + is null. + + + + Synchronizes access to the observer such that its callback methods cannot be called concurrently from multiple threads. This overload is useful when coordinating access to an observer. + Notice reentrant observer callbacks on the same thread are still possible. + + The type of the elements received by the source observer. + The observer whose callbacks should be synchronized. + An observer that delivers callbacks to the specified observer in a synchronized manner. + is null. + + Because a Monitor is used to perform the synchronization, there's no protection against reentrancy from the same thread. + Hence, overlapped observer callbacks are still possible, which is invalid behavior according to the observer grammar. In order to protect against this behavior as + well, use the overload, passing true for the second parameter. + + + + + Synchronizes access to the observer such that its callback methods cannot be called concurrently. This overload is useful when coordinating access to an observer. + The parameter configures the type of lock used for synchronization. + + The type of the elements received by the source observer. + The observer whose callbacks should be synchronized. + If set to true, reentrant observer callbacks will be queued up and get delivered to the observer in a sequential manner. + An observer that delivers callbacks to the specified observer in a synchronized manner. + is null. + + When the parameter is set to false, behavior is identical to the overload which uses + a Monitor for synchronization. When the parameter is set to true, an + is used to queue up callbacks to the specified observer if a reentrant call is made. + + + + + Synchronizes access to the observer such that its callback methods cannot be called concurrently by multiple threads, using the specified gate object for use by a Monitor-based lock. + This overload is useful when coordinating multiple observers that access shared state by synchronizing on a common gate object. + Notice reentrant observer callbacks on the same thread are still possible. + + The type of the elements received by the source observer. + The observer whose callbacks should be synchronized. + Gate object to synchronize each observer call on. + An observer that delivers callbacks to the specified observer in a synchronized manner. + or is null. + + Because a Monitor is used to perform the synchronization, there's no protection against reentrancy from the same thread. + Hence, overlapped observer callbacks are still possible, which is invalid behavior according to the observer grammar. In order to protect against this behavior as + well, use the overload. + + + + + Synchronizes access to the observer such that its callback methods cannot be called concurrently, using the specified asynchronous lock to protect against concurrent and reentrant access. + This overload is useful when coordinating multiple observers that access shared state by synchronizing on a common asynchronous lock. + + The type of the elements received by the source observer. + The observer whose callbacks should be synchronized. + Gate object to synchronize each observer call on. + An observer that delivers callbacks to the specified observer in a synchronized manner. + or is null. + + + + Schedules the invocation of observer methods on the given scheduler. + + The type of the elements received by the source observer. + The observer to schedule messages for. + Scheduler to schedule observer messages on. + Observer whose messages are scheduled on the given scheduler. + or is null. + + + + Schedules the invocation of observer methods on the given synchonization context. + + The type of the elements received by the source observer. + The observer to schedule messages for. + Synchonization context to schedule observer messages on. + Observer whose messages are scheduled on the given synchonization context. + or is null. + + + + Converts an observer to a progress object. + + The type of the progress objects received by the source observer. + The observer to convert. + Progress object whose Report messages correspond to the observer's OnNext messages. + is null. + + + + Converts an observer to a progress object, using the specified scheduler to invoke the progress reporting method. + + The type of the progress objects received by the source observer. + The observer to convert. + Scheduler to report progress on. + Progress object whose Report messages correspond to the observer's OnNext messages. + or is null. + + + + Converts a progress object to an observer. + + The type of the progress objects received by the progress reporter. + The progress object to convert. + Observer whose OnNext messages correspond to the progress object's Report messages. + is null. + + + + Class to create an IObservable<T> instance from a delegate-based implementation of the Subscribe method. + + The type of the elements in the sequence. + + + + Abstract base class for implementations of the IObservable<T> interface. + + + If you don't need a named type to create an observable sequence (i.e. you rather need + an instance rather than a reusable type), use the Observable.Create method to create + an observable sequence with specified subscription behavior. + + The type of the elements in the sequence. + + + + Subscribes the given observer to the observable sequence. + + Observer that will receive notifications from the observable sequence. + Disposable object representing an observer's subscription to the observable sequence. + is null. + + + + Implement this method with the core subscription logic for the observable sequence. + + Observer to send notifications to. + Disposable object representing an observer's subscription to the observable sequence. + + + + Creates an observable sequence object from the specified subscription function. + + Subscribe method implementation. + is null. + + + + Calls the subscription function that was supplied to the constructor. + + Observer to send notifications to. + Disposable object representing an observer's subscription to the observable sequence. + + + + Class to create an IObserver<T> instance from delegate-based implementations of the On* methods. + + The type of the elements in the sequence. + + + + Abstract base class for implementations of the IObserver<T> interface. + + This base class enforces the grammar of observers where OnError and OnCompleted are terminal messages. + The type of the elements in the sequence. + + + + Creates a new observer in a non-stopped state. + + + + + Notifies the observer of a new element in the sequence. + + Next element in the sequence. + + + + Implement this method to react to the receival of a new element in the sequence. + + Next element in the sequence. + This method only gets called when the observer hasn't stopped yet. + + + + Notifies the observer that an exception has occurred. + + The error that has occurred. + is null. + + + + Implement this method to react to the occurrence of an exception. + + The error that has occurred. + This method only gets called when the observer hasn't stopped yet, and causes the observer to stop. + + + + Notifies the observer of the end of the sequence. + + + + + Implement this method to react to the end of the sequence. + + This method only gets called when the observer hasn't stopped yet, and causes the observer to stop. + + + + Disposes the observer, causing it to transition to the stopped state. + + + + + Core implementation of IDisposable. + + true if the Dispose call was triggered by the IDisposable.Dispose method; false if it was triggered by the finalizer. + + + + Creates an observer from the specified OnNext, OnError, and OnCompleted actions. + + Observer's OnNext action implementation. + Observer's OnError action implementation. + Observer's OnCompleted action implementation. + or or is null. + + + + Creates an observer from the specified OnNext action. + + Observer's OnNext action implementation. + is null. + + + + Creates an observer from the specified OnNext and OnError actions. + + Observer's OnNext action implementation. + Observer's OnError action implementation. + or is null. + + + + Creates an observer from the specified OnNext and OnCompleted actions. + + Observer's OnNext action implementation. + Observer's OnCompleted action implementation. + or is null. + + + + Calls the onNext action. + + Next element in the sequence. + + + + Calls the onError action. + + The error that has occurred. + + + + Calls the onCompleted action. + + + + + This class fuses logic from ObserverBase, AnonymousObserver, and SafeObserver into one class. When an observer + needs to be safeguarded, an instance of this type can be created by SafeObserver.Create when it detects its + input is an AnonymousObserver, which is commonly used by end users when using the Subscribe extension methods + that accept delegates for the On* handlers. By doing the fusion, we make the call stack depth shorter which + helps debugging and some performance. + + + + + Asynchronous lock. + + + + + Queues the action for execution. If the caller acquires the lock and becomes the owner, + the queue is processed. If the lock is already owned, the action is queued and will get + processed by the owner. + + Action to queue for execution. + is null. + + + + Clears the work items in the queue and drops further work being queued. + + + + + (Infrastructure) Concurrency abstraction layer. + + + + + Gets the current CAL. If no CAL has been set yet, it will be initialized to the default. + + + + + (Infrastructure) Concurrency abstraction layer interface. + + + This type is used by the Rx infrastructure and not meant for public consumption or implementation. + No guarantees are made about forward compatibility of the type's functionality and its usage. + + + + + Queues a method for execution at the specified relative time. + + Method to execute. + State to pass to the method. + Time to execute the method on. + Disposable object that can be used to stop the timer. + + + + Queues a method for periodic execution based on the specified period. + + Method to execute; should be safe for reentrancy. + Period for running the method periodically. + Disposable object that can be used to stop the timer. + + + + Queues a method for execution. + + Method to execute. + State to pass to the method. + Disposable object that can be used to cancel the queued method. + + + + Blocking sleep operation. + + Time to sleep. + + + + Starts a new stopwatch object. + + New stopwatch object; started at the time of the request. + + + + Starts a new long-running thread. + + Method to execute. + State to pass to the method. + + + + Gets whether long-running scheduling is supported. + + + + + Provides a set of static properties to access commonly used schedulers. + + + + + Returns a scheduler that represents the original scheduler, without any of its interface-based optimizations (e.g. long running scheduling). + + Scheduler to disable all optimizations for. + Proxy to the original scheduler but without any optimizations enabled. + is null. + + + + Returns a scheduler that represents the original scheduler, without the specified set of interface-based optimizations (e.g. long running scheduling). + + Scheduler to disable the specified optimizations for. + Types of the optimization interfaces that have to be disabled. + Proxy to the original scheduler but without the specified optimizations enabled. + or is null. + + + + Returns a scheduler that wraps the original scheduler, adding exception handling for scheduled actions. + + Type of the exception to check for. + Scheduler to apply an exception filter for. + Handler that's run if an exception is caught. The exception will be rethrown if the handler returns false. + Wrapper around the original scheduler, enforcing exception handling. + or is null. + + + + Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. + If the scheduler supports periodic scheduling, the request will be forwarded to the periodic scheduling implementation. + If the scheduler provides stopwatch functionality, the periodic task will be emulated using recursive scheduling with a stopwatch to correct for time slippage. + Otherwise, the periodic task will be emulated using recursive scheduling. + + The type of the state passed to the scheduled action. + The scheduler to run periodic work on. + Initial state passed to the action upon the first iteration. + Period for running the work periodically. + Action to be executed, potentially updating the state. + The disposable object used to cancel the scheduled recurring action (best effort). + or is null. + is less than TimeSpan.Zero. + + + + Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. + If the scheduler supports periodic scheduling, the request will be forwarded to the periodic scheduling implementation. + If the scheduler provides stopwatch functionality, the periodic task will be emulated using recursive scheduling with a stopwatch to correct for time slippage. + Otherwise, the periodic task will be emulated using recursive scheduling. + + The type of the state passed to the scheduled action. + Scheduler to execute the action on. + State passed to the action to be executed. + Period for running the work periodically. + Action to be executed. + The disposable object used to cancel the scheduled recurring action (best effort). + or is null. + is less than TimeSpan.Zero. + + + + Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. + If the scheduler supports periodic scheduling, the request will be forwarded to the periodic scheduling implementation. + If the scheduler provides stopwatch functionality, the periodic task will be emulated using recursive scheduling with a stopwatch to correct for time slippage. + Otherwise, the periodic task will be emulated using recursive scheduling. + + Scheduler to execute the action on. + Period for running the work periodically. + Action to be executed. + The disposable object used to cancel the scheduled recurring action (best effort). + or is null. + is less than TimeSpan.Zero. + + + + Starts a new stopwatch object by dynamically discovering the scheduler's capabilities. + If the scheduler provides stopwatch functionality, the request will be forwarded to the stopwatch provider implementation. + Otherwise, the stopwatch will be emulated using the scheduler's notion of absolute time. + + Scheduler to obtain a stopwatch for. + New stopwatch object; started at the time of the request. + is null. + The resulting stopwatch object can have non-monotonic behavior. + + + + Returns the ISchedulerLongRunning implementation of the specified scheduler, or null if no such implementation is available. + + Scheduler to get the ISchedulerLongRunning implementation for. + The scheduler's ISchedulerLongRunning implementation if available; null otherwise. + + This helper method is made available for query operator authors in order to discover scheduler services by using the required + IServiceProvider pattern, which allows for interception or redefinition of scheduler services. + + + + + Returns the IStopwatchProvider implementation of the specified scheduler, or null if no such implementation is available. + + Scheduler to get the IStopwatchProvider implementation for. + The scheduler's IStopwatchProvider implementation if available; null otherwise. + + + This helper method is made available for query operator authors in order to discover scheduler services by using the required + IServiceProvider pattern, which allows for interception or redefinition of scheduler services. + + + Consider using in case a stopwatch is required, but use of emulation stopwatch based + on the scheduler's clock is acceptable. Use of this method is recommended for best-effort use of the stopwatch provider + scheduler service, where the caller falls back to not using stopwatches if this facility wasn't found. + + + + + + Returns the IStopwatchProvider implementation of the specified scheduler, or null if no such implementation is available. + + Scheduler to get the IStopwatchProvider implementation for. + The scheduler's IStopwatchProvider implementation if available; null otherwise. + + + This helper method is made available for query operator authors in order to discover scheduler services by using the required + IServiceProvider pattern, which allows for interception or redefinition of scheduler services. + + + Consider using the Scheduler.SchedulePeriodic extension methods for IScheduler in case periodic scheduling is required and + emulation of periodic behavior using other scheduler services is desirable. Use of this method is recommended for best-effort + use of the periodic scheduling service, where the caller falls back to not using periodic scheduling if this facility wasn't + found. + + + + + + Yields execution of the current work item on the scheduler to another work item on the scheduler. + The caller should await the result of calling Yield to schedule the remainder of the current work item (known as the continuation). + + Scheduler to yield work on. + Scheduler operation object to await in order to schedule the continuation. + is null. + + + + Yields execution of the current work item on the scheduler to another work item on the scheduler. + The caller should await the result of calling Yield to schedule the remainder of the current work item (known as the continuation). + + Scheduler to yield work on. + Cancellation token to cancel the continuation to run. + Scheduler operation object to await in order to schedule the continuation. + is null. + + + + Suspends execution of the current work item on the scheduler for the specified duration. + The caller should await the result of calling Sleep to schedule the remainder of the current work item (known as the continuation) after the specified duration. + + Scheduler to yield work on. + Time when the continuation should run. + Scheduler operation object to await in order to schedule the continuation. + is null. + + + + Suspends execution of the current work item on the scheduler for the specified duration. + The caller should await the result of calling Sleep to schedule the remainder of the current work item (known as the continuation) after the specified duration. + + Scheduler to yield work on. + Time when the continuation should run. + Cancellation token to cancel the continuation to run. + Scheduler operation object to await in order to schedule the continuation. + is null. + + + + Suspends execution of the current work item on the scheduler until the specified due time. + The caller should await the result of calling Sleep to schedule the remainder of the current work item (known as the continuation) at the specified due time. + + Scheduler to yield work on. + Time when the continuation should run. + Scheduler operation object to await in order to schedule the continuation. + is null. + + + + Suspends execution of the current work item on the scheduler until the specified due time. + The caller should await the result of calling Sleep to schedule the remainder of the current work item (known as the continuation) at the specified due time. + + Scheduler to yield work on. + Time when the continuation should run. + Cancellation token to cancel the continuation to run. + Scheduler operation object to await in order to schedule the continuation. + is null. + + + + Schedules work using an asynchronous method, allowing for cooperative scheduling in an imperative coding style. + + The type of the state passed to the scheduled action. + Scheduler to schedule work on. + State to pass to the asynchronous method. + Asynchronous method to run the work, using Yield and Sleep operations for cooperative scheduling and injection of cancellation points. + Disposable object that allows to cancel outstanding work on cooperative cancellation points or through the cancellation token passed to the asynchronous method. + or is null. + + + + Schedules work using an asynchronous method, allowing for cooperative scheduling in an imperative coding style. + + The type of the state passed to the scheduled action. + Scheduler to schedule work on. + State to pass to the asynchronous method. + Asynchronous method to run the work, using Yield and Sleep operations for cooperative scheduling and injection of cancellation points. + Disposable object that allows to cancel outstanding work on cooperative cancellation points or through the cancellation token passed to the asynchronous method. + or is null. + + + + Schedules work using an asynchronous method, allowing for cooperative scheduling in an imperative coding style. + + Scheduler to schedule work on. + Asynchronous method to run the work, using Yield and Sleep operations for cooperative scheduling and injection of cancellation points. + Disposable object that allows to cancel outstanding work on cooperative cancellation points or through the cancellation token passed to the asynchronous method. + or is null. + + + + Schedules work using an asynchronous method, allowing for cooperative scheduling in an imperative coding style. + + Scheduler to schedule work on. + Asynchronous method to run the work, using Yield and Sleep operations for cooperative scheduling and injection of cancellation points. + Disposable object that allows to cancel outstanding work on cooperative cancellation points or through the cancellation token passed to the asynchronous method. + or is null. + + + + Schedules work using an asynchronous method, allowing for cooperative scheduling in an imperative coding style. + + The type of the state passed to the scheduled action. + Scheduler to schedule work on. + State to pass to the asynchronous method. + Relative time after which to execute the action. + Asynchronous method to run the work, using Yield and Sleep operations for cooperative scheduling and injection of cancellation points. + Disposable object that allows to cancel outstanding work on cooperative cancellation points or through the cancellation token passed to the asynchronous method. + or is null. + + + + Schedules work using an asynchronous method, allowing for cooperative scheduling in an imperative coding style. + + The type of the state passed to the scheduled action. + Scheduler to schedule work on. + State to pass to the asynchronous method. + Relative time after which to execute the action. + Asynchronous method to run the work, using Yield and Sleep operations for cooperative scheduling and injection of cancellation points. + Disposable object that allows to cancel outstanding work on cooperative cancellation points or through the cancellation token passed to the asynchronous method. + or is null. + + + + Schedules work using an asynchronous method, allowing for cooperative scheduling in an imperative coding style. + + Scheduler to schedule work on. + Relative time after which to execute the action. + Asynchronous method to run the work, using Yield and Sleep operations for cooperative scheduling and injection of cancellation points. + Disposable object that allows to cancel outstanding work on cooperative cancellation points or through the cancellation token passed to the asynchronous method. + or is null. + + + + Schedules work using an asynchronous method, allowing for cooperative scheduling in an imperative coding style. + + Scheduler to schedule work on. + Relative time after which to execute the action. + Asynchronous method to run the work, using Yield and Sleep operations for cooperative scheduling and injection of cancellation points. + Disposable object that allows to cancel outstanding work on cooperative cancellation points or through the cancellation token passed to the asynchronous method. + or is null. + + + + Schedules work using an asynchronous method, allowing for cooperative scheduling in an imperative coding style. + + The type of the state passed to the scheduled action. + Scheduler to schedule work on. + State to pass to the asynchronous method. + Absolute time at which to execute the action. + Asynchronous method to run the work, using Yield and Sleep operations for cooperative scheduling and injection of cancellation points. + Disposable object that allows to cancel outstanding work on cooperative cancellation points or through the cancellation token passed to the asynchronous method. + or is null. + + + + Schedules work using an asynchronous method, allowing for cooperative scheduling in an imperative coding style. + + The type of the state passed to the scheduled action. + Scheduler to schedule work on. + State to pass to the asynchronous method. + Absolute time at which to execute the action. + Asynchronous method to run the work, using Yield and Sleep operations for cooperative scheduling and injection of cancellation points. + Disposable object that allows to cancel outstanding work on cooperative cancellation points or through the cancellation token passed to the asynchronous method. + or is null. + + + + Schedules work using an asynchronous method, allowing for cooperative scheduling in an imperative coding style. + + Scheduler to schedule work on. + Absolute time at which to execute the action. + Asynchronous method to run the work, using Yield and Sleep operations for cooperative scheduling and injection of cancellation points. + Disposable object that allows to cancel outstanding work on cooperative cancellation points or through the cancellation token passed to the asynchronous method. + or is null. + + + + Schedules work using an asynchronous method, allowing for cooperative scheduling in an imperative coding style. + + Scheduler to schedule work on. + Absolute time at which to execute the action. + Asynchronous method to run the work, using Yield and Sleep operations for cooperative scheduling and injection of cancellation points. + Disposable object that allows to cancel outstanding work on cooperative cancellation points or through the cancellation token passed to the asynchronous method. + or is null. + + + + Normalizes the specified TimeSpan value to a positive value. + + The TimeSpan value to normalize. + The specified TimeSpan value if it is zero or positive; otherwise, TimeSpan.Zero. + + + + Schedules an action to be executed recursively. + + Scheduler to execute the recursive action on. + Action to execute recursively. The parameter passed to the action is used to trigger recursive scheduling of the action. + The disposable object used to cancel the scheduled action (best effort). + or is null. + + + + Schedules an action to be executed recursively. + + The type of the state passed to the scheduled action. + Scheduler to execute the recursive action on. + State passed to the action to be executed. + Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. + The disposable object used to cancel the scheduled action (best effort). + or is null. + + + + Schedules an action to be executed recursively after a specified relative due time. + + Scheduler to execute the recursive action on. + Action to execute recursively. The parameter passed to the action is used to trigger recursive scheduling of the action at the specified relative time. + Relative time after which to execute the action for the first time. + The disposable object used to cancel the scheduled action (best effort). + or is null. + + + + Schedules an action to be executed recursively after a specified relative due time. + + The type of the state passed to the scheduled action. + Scheduler to execute the recursive action on. + State passed to the action to be executed. + Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. + Relative time after which to execute the action for the first time. + The disposable object used to cancel the scheduled action (best effort). + or is null. + + + + Schedules an action to be executed recursively at a specified absolute due time. + + Scheduler to execute the recursive action on. + Action to execute recursively. The parameter passed to the action is used to trigger recursive scheduling of the action at the specified absolute time. + Absolute time at which to execute the action for the first time. + The disposable object used to cancel the scheduled action (best effort). + or is null. + + + + Schedules an action to be executed recursively at a specified absolute due time. + + The type of the state passed to the scheduled action. + Scheduler to execute the recursive action on. + State passed to the action to be executed. + Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. + Absolute time at which to execute the action for the first time. + The disposable object used to cancel the scheduled action (best effort). + or is null. + + + + Schedules an action to be executed. + + Scheduler to execute the action on. + Action to execute. + The disposable object used to cancel the scheduled action (best effort). + or is null. + + + + Schedules an action to be executed after the specified relative due time. + + Scheduler to execute the action on. + Action to execute. + Relative time after which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + or is null. + + + + Schedules an action to be executed at the specified absolute due time. + + Scheduler to execute the action on. + Action to execute. + Absolute time at which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + or is null. + + + + Schedules an action to be executed. + + Scheduler to execute the action on. + Action to execute. + The disposable object used to cancel the scheduled action (best effort). + or is null. + + + + Gets the current time according to the local machine's system clock. + + + + + Gets a scheduler that schedules work immediately on the current thread. + + + + + Gets a scheduler that schedules work as soon as possible on the current thread. + + + + + Gets a scheduler that schedules work on the platform's default scheduler. + + + + + Gets a scheduler that schedules work on the thread pool. + + + + + Gets a scheduler that schedules work on a new thread using default thread creation options. + + + + + Gets a scheduler that schedules work on Task Parallel Library (TPL) task pool using the default TaskScheduler. + + + + + Abstract base class for machine-local schedulers, using the local system clock for time-based operations. + + + + + Maximum error ratio for timer drift. We've seen machines with 10s drift on a + daily basis, which is in the order 10E-4, so we allow for extra margin here. + This value is used to calculate early arrival for the long term queue timer + that will reevaluate work for the short term queue. + + Example: -------------------------------...---------------------*-----$ + ^ ^ + | | + early due + 0.999 1.0 + + We also make the gap between early and due at least LONGTOSHORT so we have + enough time to transition work to short term and as a courtesy to the + destination scheduler to manage its queues etc. + + + + + Gate to protect queues and to synchronize scheduling decisions and system clock + change management. + + + + + Long term work queue. Contains work that's due beyond SHORTTERM, computed at the + time of enqueueing. + + + + + Disposable resource for the long term timer that will reevaluate and dispatch the + first item in the long term queue. A serial disposable is used to make "dispose + current and assign new" logic easier. The disposable itself is never disposed. + + + + + Item at the head of the long term queue for which the current long term timer is + running. Used to detect changes in the queue and decide whether we should replace + or can continue using the current timer (because no earlier long term work was + added to the queue). + + + + + Short term work queue. Contains work that's due soon, computed at the time of + enqueueing or upon reevaluation of the long term queue causing migration of work + items. This queue is kept in order to be able to relocate short term items back + to the long term queue in case a system clock change occurs. + + + + + Set of disposable handles to all of the current short term work Schedule calls, + allowing those to be cancelled upon a system clock change. + + + + + Threshold where an item is considered to be short term work or gets moved from + long term to short term. + + + + + Minimum threshold for the long term timer to fire before the queue is reevaluated + for short term work. This value is chosen to be less than SHORTTERM in order to + ensure the timer fires and has work to transition to the short term queue. + + + + + Threshold used to determine when a short term timer has fired too early compared + to the absolute due time. This provides a last chance protection against early + completion of scheduled work, which can happen in case of time adjustment in the + operating system (cf. GetSystemTimeAdjustment). + + + + + Longest interval supported by . + + + + + Enqueues absolute time scheduled work in the timer queue or the short term work list. + + Scheduler to run the work on. Typically "this" from the caller's perspective (LocalScheduler.Schedule), but parameter kept because we have a single (static) timer queue across all of Rx local schedulers. + State to pass to the action. + Absolute time to run the work on. The timer queue is responsible to execute the work close to the specified time, also accounting for system clock changes. + Action to run, potentially recursing into the scheduler. + Disposable object to prevent the work from running. + + + + Schedule work that's due in the short term. This leads to relative scheduling calls to the + underlying scheduler for short TimeSpan values. If the system clock changes in the meantime, + the short term work is attempted to be cancelled and reevaluated. + + Work item to schedule in the short term. The caller is responsible to determine the work is indeed short term. + + + + Callback to process the next short term work item. + + Recursive scheduler supplied by the underlying scheduler. + Disposable used to identify the work the timer was triggered for (see code for usage). + Empty disposable. Recursive work cancellation is wired through the original WorkItem. + + + + Schedule work that's due on the long term. This leads to the work being queued up for + eventual transitioning to the short term work list. + + Work item to schedule on the long term. The caller is responsible to determine the work is indeed long term. + + + + Updates the long term timer which is responsible to transition work from the head of the + long term queue to the short term work list. + + Should be called under the scheduler lock. + + + + Evaluates the long term queue, transitioning short term work to the short term list, + and adjusting the new long term processing timer accordingly. + + Ignored. + + + + Callback invoked when a system clock change is observed in order to adjust and reevaluate + the internal scheduling queues. + + Currently not used. + Currently not used. + + + + Schedules an action to be executed. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Schedules an action to be executed after dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + Relative time after which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + + + + Schedules an action to be executed at dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + Absolute time at which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Starts a new stopwatch object. + + New stopwatch object; started at the time of the request. + + Platform-specific scheduler implementations should reimplement IStopwatchProvider to provide a more + efficient IStopwatch implementation (if available). + + + + + Discovers scheduler services by interface type. The base class implementation returns + requested services for each scheduler interface implemented by the derived class. For + more control over service discovery, derived types can override this method. + + Scheduler service interface type to discover. + Object implementing the requested service, if available; null otherwise. + + + + Gets the scheduler's notion of current time. + + + + + Represents a work item in the absolute time scheduler. + + + This type is very similar to ScheduledItem, but we need a different Invoke signature to allow customization + of the target scheduler (e.g. when called in a recursive scheduling context, see ExecuteNextShortTermWorkItem). + + + + + Represents a work item that closes over scheduler invocation state. Subtyping is + used to have a common type for the scheduler queues. + + + + + Represents an object that schedules units of work on the current thread. + + Singleton instance of this type exposed through this static property. + + + + Schedules an action to be executed after dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + Relative time after which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Gets the singleton instance of the current thread scheduler. + + + + + Gets a value that indicates whether the caller must call a Schedule method. + + + + + Gets a value that indicates whether the caller must call a Schedule method. + + + + + Represents an object that schedules units of work to run immediately on the current thread. + + Singleton instance of this type exposed through this static property. + + + + Schedules an action to be executed. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Schedules an action to be executed after dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + Relative time after which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Gets the singleton instance of the immediate scheduler. + + + + + Abstract base class for scheduled work items. + + Absolute time representation type. + + + + Creates a new scheduled work item to run at the specified time. + + Absolute time at which the work item has to be executed. + Comparer used to compare work items based on their scheduled time. + is null. + + + + Invokes the work item. + + + + + Implement this method to perform the work item invocation, returning a disposable object for deep cancellation. + + Disposable object used to cancel the work item and/or derived work items. + + + + Compares the work item with another work item based on absolute time values. + + Work item to compare the current work item to. + Relative ordering between this and the specified work item. + The inequality operators are overloaded to provide results consistent with the IComparable implementation. Equality operators implement traditional reference equality semantics. + + + + Determines whether one specified ScheduledItem<TAbsolute> object is due before a second specified ScheduledItem<TAbsolute> object. + + The first object to compare. + The second object to compare. + true if the DueTime value of left is earlier than the DueTime value of right; otherwise, false. + This operator provides results consistent with the IComparable implementation. + + + + Determines whether one specified ScheduledItem<TAbsolute> object is due before or at the same of a second specified ScheduledItem<TAbsolute> object. + + The first object to compare. + The second object to compare. + true if the DueTime value of left is earlier than or simultaneous with the DueTime value of right; otherwise, false. + This operator provides results consistent with the IComparable implementation. + + + + Determines whether one specified ScheduledItem<TAbsolute> object is due after a second specified ScheduledItem<TAbsolute> object. + + The first object to compare. + The second object to compare. + true if the DueTime value of left is later than the DueTime value of right; otherwise, false. + This operator provides results consistent with the IComparable implementation. + + + + Determines whether one specified ScheduledItem<TAbsolute> object is due after or at the same time of a second specified ScheduledItem<TAbsolute> object. + + The first object to compare. + The second object to compare. + true if the DueTime value of left is later than or simultaneous with the DueTime value of right; otherwise, false. + This operator provides results consistent with the IComparable implementation. + + + + Determines whether two specified ScheduledItem<TAbsolute, TValue> objects are equal. + + The first object to compare. + The second object to compare. + true if both ScheduledItem<TAbsolute, TValue> are equal; otherwise, false. + This operator does not provide results consistent with the IComparable implementation. Instead, it implements reference equality. + + + + Determines whether two specified ScheduledItem<TAbsolute, TValue> objects are inequal. + + The first object to compare. + The second object to compare. + true if both ScheduledItem<TAbsolute, TValue> are inequal; otherwise, false. + This operator does not provide results consistent with the IComparable implementation. Instead, it implements reference equality. + + + + Determines whether a ScheduledItem<TAbsolute> object is equal to the specified object. + + The object to compare to the current ScheduledItem<TAbsolute> object. + true if the obj parameter is a ScheduledItem<TAbsolute> object and is equal to the current ScheduledItem<TAbsolute> object; otherwise, false. + + + + Returns the hash code for the current ScheduledItem<TAbsolute> object. + + A 32-bit signed integer hash code. + + + + Cancels the work item by disposing the resource returned by InvokeCore as soon as possible. + + + + + Gets the absolute time at which the item is due for invocation. + + + + + Gets whether the work item has received a cancellation request. + + + + + Represents a scheduled work item based on the materialization of an IScheduler.Schedule method call. + + Absolute time representation type. + Type of the state passed to the scheduled action. + + + + Creates a materialized work item. + + Recursive scheduler to invoke the scheduled action with. + State to pass to the scheduled action. + Scheduled action. + Time at which to run the scheduled action. + Comparer used to compare work items based on their scheduled time. + or or is null. + + + + Creates a materialized work item. + + Recursive scheduler to invoke the scheduled action with. + State to pass to the scheduled action. + Scheduled action. + Time at which to run the scheduled action. + or is null. + + + + Invokes the scheduled action with the supplied recursive scheduler and state. + + Cancellation resource returned by the scheduled action. + + + + Represents an awaitable scheduler operation. Awaiting the object causes the continuation to be posted back to the originating scheduler's work queue. + + + + + Controls whether the continuation is run on the originating synchronization context (false by default). + + true to run the continuation on the captured synchronization context; false otherwise (default). + Scheduler operation object with configured await behavior. + + + + Gets an awaiter for the scheduler operation, used to post back the continuation. + + Awaiter for the scheduler operation. + + + + (Infrastructure) Scheduler operation awaiter type used by the code generated for C# await and Visual Basic Await expressions. + + + + + Completes the scheduler operation, throwing an OperationCanceledException in case cancellation was requested. + + + + + Registers the continuation with the scheduler operation. + + Continuation to be run on the originating scheduler. + + + + Indicates whether the scheduler operation has completed. Returns false unless cancellation was already requested. + + + + + Efficient scheduler queue that maintains scheduled items sorted by absolute time. + + Absolute time representation type. + This type is not thread safe; users should ensure proper synchronization. + + + + Creates a new scheduler queue with a default initial capacity. + + + + + Creats a new scheduler queue with the specified initial capacity. + + Initial capacity of the scheduler queue. + is less than zero. + + + + Enqueues the specified work item to be scheduled. + + Work item to be scheduled. + + + + Removes the specified work item from the scheduler queue. + + Work item to be removed from the scheduler queue. + true if the item was found; false otherwise. + + + + Dequeues the next work item from the scheduler queue. + + Next work item in the scheduler queue (removed). + + + + Peeks the next work item in the scheduler queue. + + Next work item in the scheduler queue (not removed). + + + + Gets the number of scheduled items in the scheduler queue. + + + + + Provides basic synchronization and scheduling services for observable sequences. + + + + + Wraps the source sequence in order to run its subscription and unsubscription logic on the specified scheduler. + + The type of the elements in the source sequence. + Source sequence. + Scheduler to perform subscription and unsubscription actions on. + The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. + or is null. + + Only the side-effects of subscribing to the source sequence and disposing subscriptions to the source sequence are run on the specified scheduler. + In order to invoke observer callbacks on the specified scheduler, e.g. to offload callback processing to a dedicated thread, use . + + + + + Wraps the source sequence in order to run its subscription and unsubscription logic on the specified synchronization context. + + The type of the elements in the source sequence. + Source sequence. + Synchronization context to perform subscription and unsubscription actions on. + The source sequence whose subscriptions and unsubscriptions happen on the specified synchronization context. + or is null. + + Only the side-effects of subscribing to the source sequence and disposing subscriptions to the source sequence are run on the specified synchronization context. + In order to invoke observer callbacks on the specified synchronization context, e.g. to post callbacks to a UI thread represented by the synchronization context, use . + + + + + Wraps the source sequence in order to run its observer callbacks on the specified scheduler. + + The type of the elements in the source sequence. + Source sequence. + Scheduler to notify observers on. + The source sequence whose observations happen on the specified scheduler. + or is null. + + + + Wraps the source sequence in order to run its observer callbacks on the specified synchronization context. + + The type of the elements in the source sequence. + Source sequence. + Synchronization context to notify observers on. + The source sequence whose observations happen on the specified synchronization context. + or is null. + + + + Wraps the source sequence in order to ensure observer callbacks are properly serialized. + + The type of the elements in the source sequence. + Source sequence. + The source sequence whose outgoing calls to observers are synchronized. + is null. + + + + Wraps the source sequence in order to ensure observer callbacks are synchronized using the specified gate object. + + The type of the elements in the source sequence. + Source sequence. + Gate object to synchronize each observer call on. + The source sequence whose outgoing calls to observers are synchronized on the given gate object. + or is null. + + + + Base class for implementation of query operators, providing performance benefits over the use of Observable.Create. + + Type of the resulting sequence's elements. + + + + Interface with variance annotation; allows for better type checking when detecting capabilities in SubscribeSafe. + + Type of the resulting sequence's elements. + + + + Publicly visible Subscribe method. + + Observer to send notifications on. The implementation of a producer must ensure the correct message grammar on the observer. + IDisposable to cancel the subscription. This causes the underlying sink to be notified of unsubscription, causing it to prevent further messages from being sent to the observer. + + + + Core implementation of the query operator, called upon a new subscription to the producer object. + + Observer to send notifications on. The implementation of a producer must ensure the correct message grammar on the observer. + The subscription disposable object returned from the Run call, passed in such that it can be forwarded to the sink, allowing it to dispose the subscription upon sending a final message (or prematurely for other reasons). + Callback to communicate the sink object to the subscriber, allowing consumers to tunnel a Dispose call into the sink, which can stop the processing. + Disposable representing all the resources and/or subscriptions the operator uses to process events. + The observer passed in to this method is not protected using auto-detach behavior upon an OnError or OnCompleted call. The implementation must ensure proper resource disposal and enforce the message grammar. + + + + Base class for implementation of query operators, providing a lightweight sink that can be disposed to mute the outgoing observer. + + Type of the resulting sequence's elements. + Implementations of sinks are responsible to enforce the message grammar on the associated observer. Upon sending a terminal message, a pairing Dispose call should be made to trigger cancellation of related resources and to mute the outgoing observer. + + + + Represents an object that schedules units of work on a provided . + + + + + Creates an object that schedules units of work on the provided . + + Synchronization context to schedule units of work on. + is null. + + + + Creates an object that schedules units of work on the provided . + + Synchronization context to schedule units of work on. + Configures whether scheduling always posts to the synchronization context, regardless whether the caller is on the same synchronization context. + is null. + + + + Schedules an action to be executed. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Schedules an action to be executed after dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + Relative time after which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Represents an object that schedules units of work on the platform's default scheduler. + + Singleton instance of this type exposed through this static property. + + + + Schedules an action to be executed. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Schedules an action to be executed after dueTime, using a System.Threading.Timer object. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + Relative time after which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Schedules a periodic piece of work, using a System.Threading.Timer object. + + The type of the state passed to the scheduled action. + Initial state passed to the action upon the first iteration. + Period for running the work periodically. + Action to be executed, potentially updating the state. + The disposable object used to cancel the scheduled recurring action (best effort). + is less than TimeSpan.Zero. + is null. + + + + Discovers scheduler services by interface type. + + Scheduler service interface type to discover. + Object implementing the requested service, if available; null otherwise. + + + + Gets the singleton instance of the default scheduler. + + + + + Represents an Action-based disposable. + + + + + Constructs a new disposable with the given action used for disposal. + + Disposal action which will be run upon calling Dispose. + + + + Calls the disposal action if and only if the current instance hasn't been disposed yet. + + + + + Gets a value that indicates whether the object is disposed. + + + + + Represents a disposable resource that can be checked for disposal status. + + + + + Initializes a new instance of the class. + + + + + Sets the status to disposed, which can be observer through the property. + + + + + Gets a value that indicates whether the object is disposed. + + + + + Represents a disposable resource that has an associated that will be set to the cancellation requested state upon disposal. + + + + + Initializes a new instance of the class that uses an existing . + + used for cancellation. + is null. + + + + Initializes a new instance of the class that uses a new . + + + + + Cancels the underlying . + + + + + Gets the used by this CancellationDisposable. + + + + + Gets a value that indicates whether the object is disposed. + + + + + Represents a group of disposable resources that are disposed together. + + + + + Initializes a new instance of the class with no disposables contained by it initially. + + + + + Initializes a new instance of the class with the specified number of disposables. + + The number of disposables that the new CompositeDisposable can initially store. + is less than zero. + + + + Initializes a new instance of the class from a group of disposables. + + Disposables that will be disposed together. + is null. + + + + Initializes a new instance of the class from a group of disposables. + + Disposables that will be disposed together. + is null. + + + + Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. + + Disposable to add. + is null. + + + + Removes and disposes the first occurrence of a disposable from the CompositeDisposable. + + Disposable to remove. + true if found; false otherwise. + is null. + + + + Disposes all disposables in the group and removes them from the group. + + + + + Removes and disposes all disposables from the CompositeDisposable, but does not dispose the CompositeDisposable. + + + + + Determines whether the CompositeDisposable contains a specific disposable. + + Disposable to search for. + true if the disposable was found; otherwise, false. + is null. + + + + Copies the disposables contained in the CompositeDisposable to an array, starting at a particular array index. + + Array to copy the contained disposables to. + Target index at which to copy the first disposable of the group. + is null. + is less than zero. -or - is larger than or equal to the array length. + + + + Returns an enumerator that iterates through the CompositeDisposable. + + An enumerator to iterate over the disposables. + + + + Returns an enumerator that iterates through the CompositeDisposable. + + An enumerator to iterate over the disposables. + + + + Gets the number of disposables contained in the CompositeDisposable. + + + + + Always returns false. + + + + + Gets a value that indicates whether the object is disposed. + + + + + Represents a disposable resource whose disposal invocation will be posted to the specified . + + + + + Initializes a new instance of the class that uses the specified on which to dispose the specified disposable resource. + + Context to perform disposal on. + Disposable whose Dispose operation to run on the given synchronization context. + or is null. + + + + Disposes the underlying disposable on the provided . + + + + + Gets the provided . + + + + + Gets a value that indicates whether the object is disposed. + + + + + Represents a disposable that does nothing on disposal. + + + + + Singleton default disposable. + + + + + Does nothing. + + + + + Provides a set of static methods for creating Disposables. + + + + + Creates a disposable object that invokes the specified action when disposed. + + Action to run during the first call to . The action is guaranteed to be run at most once. + The disposable object that runs the given action upon disposal. + is null. + + + + Gets the disposable that does nothing when disposed. + + + + + Represents a disposable resource whose underlying disposable resource can be swapped for another disposable resource. + + + + + Initializes a new instance of the class with no current underlying disposable. + + + + + Disposes the underlying disposable as well as all future replacements. + + + + + Gets a value that indicates whether the object is disposed. + + + + + Gets or sets the underlying disposable. After disposal, the result of getting this property is undefined. + + If the MutableDisposable has already been disposed, assignment to this property causes immediate disposal of the given disposable object. + + + + Represents a disposable resource that only disposes its underlying disposable resource when all dependent disposable objects have been disposed. + + + + + Initializes a new instance of the class with the specified disposable. + + Underlying disposable. + is null. + + + + Returns a dependent disposable that when disposed decreases the refcount on the underlying disposable. + + A dependent disposable contributing to the reference count that manages the underlying disposable's lifetime. + + + + Disposes the underlying disposable only when all dependent disposables have been disposed. + + + + + Gets a value that indicates whether the object is disposed. + + + + + Represents a disposable resource whose disposal invocation will be scheduled on the specified . + + + + + Initializes a new instance of the class that uses an on which to dispose the disposable. + + Scheduler where the disposable resource will be disposed on. + Disposable resource to dispose on the given scheduler. + or is null. + + + + Disposes the wrapped disposable on the provided scheduler. + + + + + Gets the scheduler where the disposable resource will be disposed on. + + + + + Gets the underlying disposable. After disposal, the result is undefined. + + + + + Gets a value that indicates whether the object is disposed. + + + + + Represents a disposable resource whose underlying disposable resource can be replaced by another disposable resource, causing automatic disposal of the previous underlying disposable resource. + + + + + Initializes a new instance of the class. + + + + + Disposes the underlying disposable as well as all future replacements. + + + + + Gets a value that indicates whether the object is disposed. + + + + + Gets or sets the underlying disposable. + + If the SerialDisposable has already been disposed, assignment to this property causes immediate disposal of the given disposable object. Assigning this property disposes the previous disposable object. + + + + Represents a disposable resource which only allows a single assignment of its underlying disposable resource. + If an underlying disposable resource has already been set, future attempts to set the underlying disposable resource will throw an . + + + + + Initializes a new instance of the class. + + + + + Disposes the underlying disposable. + + + + + Gets a value that indicates whether the object is disposed. + + + + + Gets or sets the underlying disposable. After disposal, the result of getting this property is undefined. + + Thrown if the SingleAssignmentDisposable has already been assigned to. + + + + (Infrastructure) Services to rethrow exceptions. + + + This type is used by the Rx infrastructure and not meant for public consumption or implementation. + No guarantees are made about forward compatibility of the type's functionality and its usage. + + + + + Rethrows the specified exception. + + Exception to rethrow. + + + + (Infrastructure) Provides access to the host's lifecycle management services. + + + + + Adds a reference to the host lifecycle manager, causing it to be sending notifications. + + + + + Removes a reference to the host lifecycle manager, causing it to stop sending notifications + if the removed reference was the last one. + + + + + Event that gets raised when the host suspends the application. + + + + + Event that gets raised when the host resumes the application. + + + + + (Infrastructure) Provides notifications about the host's lifecycle events. + + + + + Event that gets raised when the host suspends. + + + + + Event that gets raised when the host resumes. + + + + + (Infrastructure) Event arguments for host suspension events. + + + + + (Infrastructure) Event arguments for host resumption events. + + + + + (Infrastructure) Interface for enlightenment providers. + + + This type is used by the Rx infrastructure and not meant for public consumption or implementation. + No guarantees are made about forward compatibility of the type's functionality and its usage. + + + + + (Infastructure) Tries to gets the specified service. + + Service type. + Optional set of arguments. + Service instance or null if not found. + + + + (Infrastructure) Provider for platform-specific framework enlightenments. + + + This type is used by the Rx infrastructure and not meant for public consumption or implementation. + + + + + (Infrastructure) Gets the current enlightenment provider. If none is loaded yet, accessing this property triggers provider resolution. + + + This member is used by the Rx infrastructure and not meant for public consumption or implementation. + + + + + (Infrastructure) Provides access to local system clock services. + + + This type is used by the Rx infrastructure and not meant for public consumption or implementation. + No guarantees are made about forward compatibility of the type's functionality and its usage. + + + + + Adds a reference to the system clock monitor, causing it to be sending notifications. + + Thrown when the system doesn't support sending clock change notifications. + + + + Removes a reference to the system clock monitor, causing it to stop sending notifications + if the removed reference was the last one. + + + + + Gets the local system clock time. + + + + + Event that gets raised when a system clock change is detected, if there's any interest as indicated by AddRef calls. + + + + + (Infrastructure) Provides access to the local system clock. + + + This type is used by the Rx infrastructure and not meant for public consumption or implementation. + No guarantees are made about forward compatibility of the type's functionality and its usage. + + + + + Gets the current time. + + + + + (Infrastructure) Provides a mechanism to notify local schedulers about system clock changes. + + + This type is used by the Rx infrastructure and not meant for public consumption or implementation. + No guarantees are made about forward compatibility of the type's functionality and its usage. + + + + + Event that gets raised when a system clock change is detected. + + + + + (Infrastructure) Event arguments for system clock change notifications. + + + This type is used by the Rx infrastructure and not meant for public consumption or implementation. + No guarantees are made about forward compatibility of the type's functionality and its usage. + + + + + Creates a new system clock notification object with unknown old and new times. + + + + + Creates a new system clock notification object with the specified old and new times. + + Time before the system clock changed, or DateTimeOffset.MinValue if not known. + Time after the system clock changed, or DateTimeOffset.MaxValue if not known. + + + + Gets the time before the system clock changed, or DateTimeOffset.MinValue if not known. + + + + + Gets the time after the system clock changed, or DateTimeOffset.MaxValue if not known. + + + + + (Infrastructure) Provides access to the local system clock. + + + + + Gets the current time. + + + + + (Infrastructure) Monitors for system clock changes based on a periodic timer. + + + + + Creates a new monitor for system clock changes with the specified polling frequency. + + Polling frequency for system clock changes. + + + + Event that gets raised when a system clock change is detected. + + + + + Indicates the type of a notification. + + + + + Represents an OnNext notification. + + + + + Represents an OnError notification. + + + + + Represents an OnCompleted notification. + + + + + Represents a notification to an observer. + + The type of the elements received by the observer. + + + + Default constructor used by derived types. + + + + + Determines whether the current Notification<T> object has the same observer message payload as a specified Notification<T> value. + + An object to compare to the current Notification<T> object. + true if both Notification<T> objects have the same observer message payload; otherwise, false. + + Equality of Notification<T> objects is based on the equality of the observer message payload they represent, including the notification Kind and the Value or Exception (if any). + This means two Notification<T> objects can be equal even though they don't represent the same observer method call, but have the same Kind and have equal parameters passed to the observer method. + In case one wants to determine whether two Notification<T> objects represent the same observer method call, use Object.ReferenceEquals identity equality instead. + + + + + Determines whether the two specified Notification<T> objects have the same observer message payload. + + The first Notification<T> to compare, or null. + The second Notification<T> to compare, or null. + true if the first Notification<T> value has the same observer message payload as the second Notification<T> value; otherwise, false. + + Equality of Notification<T> objects is based on the equality of the observer message payload they represent, including the notification Kind and the Value or Exception (if any). + This means two Notification<T> objects can be equal even though they don't represent the same observer method call, but have the same Kind and have equal parameters passed to the observer method. + In case one wants to determine whether two Notification<T> objects represent the same observer method call, use Object.ReferenceEquals identity equality instead. + + + + + Determines whether the two specified Notification<T> objects have a different observer message payload. + + The first Notification<T> to compare, or null. + The second Notification<T> to compare, or null. + true if the first Notification<T> value has a different observer message payload as the second Notification<T> value; otherwise, false. + + Equality of Notification<T> objects is based on the equality of the observer message payload they represent, including the notification Kind and the Value or Exception (if any). + This means two Notification<T> objects can be equal even though they don't represent the same observer method call, but have the same Kind and have equal parameters passed to the observer method. + In case one wants to determine whether two Notification<T> objects represent a different observer method call, use Object.ReferenceEquals identity equality instead. + + + + + Determines whether the specified System.Object is equal to the current Notification<T>. + + The System.Object to compare with the current Notification<T>. + true if the specified System.Object is equal to the current Notification<T>; otherwise, false. + + Equality of Notification<T> objects is based on the equality of the observer message payload they represent, including the notification Kind and the Value or Exception (if any). + This means two Notification<T> objects can be equal even though they don't represent the same observer method call, but have the same Kind and have equal parameters passed to the observer method. + In case one wants to determine whether two Notification<T> objects represent the same observer method call, use Object.ReferenceEquals identity equality instead. + + + + + Invokes the observer's method corresponding to the notification. + + Observer to invoke the notification on. + + + + Invokes the observer's method corresponding to the notification and returns the produced result. + + The type of the result returned from the observer's notification handlers. + Observer to invoke the notification on. + Result produced by the observation. + + + + Invokes the delegate corresponding to the notification. + + Delegate to invoke for an OnNext notification. + Delegate to invoke for an OnError notification. + Delegate to invoke for an OnCompleted notification. + + + + Invokes the delegate corresponding to the notification and returns the produced result. + + The type of the result returned from the notification handler delegates. + Delegate to invoke for an OnNext notification. + Delegate to invoke for an OnError notification. + Delegate to invoke for an OnCompleted notification. + Result produced by the observation. + + + + Returns an observable sequence with a single notification, using the immediate scheduler. + + The observable sequence that surfaces the behavior of the notification upon subscription. + + + + Returns an observable sequence with a single notification. + + Scheduler to send out the notification calls on. + The observable sequence that surfaces the behavior of the notification upon subscription. + + + + Returns the value of an OnNext notification or throws an exception. + + + + + Returns a value that indicates whether the notification has a value. + + + + + Returns the exception of an OnError notification or returns null. + + + + + Gets the kind of notification that is represented. + + + + + Represents an OnNext notification to an observer. + + + + + Constructs a notification of a new value. + + + + + Returns the hash code for this instance. + + + + + Indicates whether this instance and a specified object are equal. + + + + + Returns a string representation of this instance. + + + + + Invokes the observer's method corresponding to the notification. + + Observer to invoke the notification on. + + + + Invokes the observer's method corresponding to the notification and returns the produced result. + + Observer to invoke the notification on. + Result produced by the observation. + + + + Invokes the delegate corresponding to the notification. + + Delegate to invoke for an OnNext notification. + Delegate to invoke for an OnError notification. + Delegate to invoke for an OnCompleted notification. + + + + Invokes the delegate corresponding to the notification and returns the produced result. + + Delegate to invoke for an OnNext notification. + Delegate to invoke for an OnError notification. + Delegate to invoke for an OnCompleted notification. + Result produced by the observation. + + + + Returns the value of an OnNext notification. + + + + + Returns null. + + + + + Returns true. + + + + + Returns NotificationKind.OnNext. + + + + + Represents an OnError notification to an observer. + + + + + Constructs a notification of an exception. + + + + + Returns the hash code for this instance. + + + + + Indicates whether this instance and other are equal. + + + + + Returns a string representation of this instance. + + + + + Invokes the observer's method corresponding to the notification. + + Observer to invoke the notification on. + + + + Invokes the observer's method corresponding to the notification and returns the produced result. + + Observer to invoke the notification on. + Result produced by the observation. + + + + Invokes the delegate corresponding to the notification. + + Delegate to invoke for an OnNext notification. + Delegate to invoke for an OnError notification. + Delegate to invoke for an OnCompleted notification. + + + + Invokes the delegate corresponding to the notification and returns the produced result. + + Delegate to invoke for an OnNext notification. + Delegate to invoke for an OnError notification. + Delegate to invoke for an OnCompleted notification. + Result produced by the observation. + + + + Throws the exception. + + + + + Returns the exception. + + + + + Returns false. + + + + + Returns NotificationKind.OnError. + + + + + Represents an OnCompleted notification to an observer. + + + + + Constructs a notification of the end of a sequence. + + + + + Returns the hash code for this instance. + + + + + Indicates whether this instance and other are equal. + + + + + Returns a string representation of this instance. + + + + + Invokes the observer's method corresponding to the notification. + + Observer to invoke the notification on. + + + + Invokes the observer's method corresponding to the notification and returns the produced result. + + Observer to invoke the notification on. + Result produced by the observation. + + + + Invokes the delegate corresponding to the notification. + + Delegate to invoke for an OnNext notification. + Delegate to invoke for an OnError notification. + Delegate to invoke for an OnCompleted notification. + + + + Invokes the delegate corresponding to the notification and returns the produced result. + + Delegate to invoke for an OnNext notification. + Delegate to invoke for an OnError notification. + Delegate to invoke for an OnCompleted notification. + Result produced by the observation. + + + + Throws an InvalidOperationException. + + + + + Returns null. + + + + + Returns false. + + + + + Returns NotificationKind.OnCompleted. + + + + + Provides a set of static methods for constructing notifications. + + + + + Creates an object that represents an OnNext notification to an observer. + + The type of the elements received by the observer. Upon dematerialization of the notifications into an observable sequence, this type is used as the element type for the sequence. + The value contained in the notification. + The OnNext notification containing the value. + + + + Creates an object that represents an OnError notification to an observer. + + The type of the elements received by the observer. Upon dematerialization of the notifications into an observable sequence, this type is used as the element type for the sequence. + The exception contained in the notification. + The OnError notification containing the exception. + is null. + + + + Creates an object that represents an OnCompleted notification to an observer. + + The type of the elements received by the observer. Upon dematerialization of the notifications into an observable sequence, this type is used as the element type for the sequence. + The OnCompleted notification. + + + + Represents a type with a single value. This type is often used to denote the successful completion of a void-returning method (C#) or a Sub procedure (Visual Basic). + + + + + Determines whether the specified Unit values is equal to the current Unit. Because Unit has a single value, this always returns true. + + An object to compare to the current Unit value. + Because Unit has a single value, this always returns true. + + + + Determines whether the specified System.Object is equal to the current Unit. + + The System.Object to compare with the current Unit. + true if the specified System.Object is a Unit value; otherwise, false. + + + + Returns the hash code for the current Unit value. + + A hash code for the current Unit value. + + + + Returns a string representation of the current Unit value. + + String representation of the current Unit value. + + + + Determines whether the two specified Unit values are equal. Because Unit has a single value, this always returns true. + + The first Unit value to compare. + The second Unit value to compare. + Because Unit has a single value, this always returns true. + + + + Determines whether the two specified Unit values are not equal. Because Unit has a single value, this always returns false. + + The first Unit value to compare. + The second Unit value to compare. + Because Unit has a single value, this always returns false. + + + + Gets the single unit value. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Using the Scheduler.{0} property is no longer supported due to refactoring of the API surface and elimination of platform-specific dependencies. Please include System.Reactive.PlatformServices for your target platform and use the {0}Scheduler type instead.. + + + + + Looks up a localized string similar to OnCompleted notification doesn't have a value.. + + + + + Looks up a localized string similar to Disposable has already been assigned.. + + + + + Looks up a localized string similar to Failed to start monitoring system clock changes.. + + + + + Looks up a localized string similar to Heap is empty.. + + + + + Looks up a localized string similar to Reentrancy has been detected.. + + + + + Looks up a localized string similar to Observer has already terminated.. + + + + + Looks up a localized string similar to This scheduler operation has already been awaited.. + + + + diff --git a/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Core.dll b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..cb350befc2a2b730bc95502d06b1210cc947c6d5 GIT binary patch literal 114896 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 H;o$riy%A;s literal 0 HcmV?d00001 diff --git a/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Interfaces.XML b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Interfaces.XML new file mode 100644 index 00000000..30ff445d --- /dev/null +++ b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Interfaces.XML @@ -0,0 +1,336 @@ + + + + System.Reactive.Interfaces + + + + + The System.Reactive namespace contains interfaces and classes used throughout the Reactive Extensions library. + + + + + The System.Reactive.Concurrency namespace contains interfaces and classes that provide the scheduler infrastructure used by Reactive Extensions to construct and + process event streams. Schedulers are used to parameterize the concurrency introduced by query operators, provide means to virtualize time, to process historical data, + and to write unit tests for functionality built using Reactive Extensions constructs. + + + + + The System.Reactive.Disposables namespace contains interfaces and classes that provide a compositional set of constructs used to deal with resource and subscription + management in Reactive Extensions. Those types are used extensively within the implementation of Reactive Extensions and are useful when writing custom query operators or + schedulers. + + + + + The System.Reactive.Linq namespace contains interfaces and classes that support expressing queries over observable sequences, using Language Integrated Query (LINQ). + Query operators are made available as extension methods for IObservable<T> and IQbservable<T> defined on the Observable and Qbservable classes, respectively. + + + + + The System.Reactive.Subjects namespace contains interfaces and classes to represent subjects, which are objects implementing both IObservable<T> and IObserver<T>. + Subjects are often used as sources of events, allowing one party to raise events and allowing another party to write queries over the event stream. Because of their ability to + have multiple registered observers, subjects are also used as a facility to provide multicast behavior for event streams in queries. + + + + + Scheduler with support for running periodic tasks. + This type of scheduler can be used to run timers more efficiently instead of using recursive scheduling. + + + + + Schedules a periodic piece of work. + + The type of the state passed to the scheduled action. + Initial state passed to the action upon the first iteration. + Period for running the work periodically. + Action to be executed, potentially updating the state. + The disposable object used to cancel the scheduled recurring action (best effort). + + + + Provider for IStopwatch objects. + + + + + Starts a new stopwatch object. + + New stopwatch object; started at the time of the request. + + + + Represents a work item that has been scheduled. + + Absolute time representation type. + + + + Invokes the work item. + + + + + Gets the absolute time at which the item is due for invocation. + + + + + Represents an object that schedules units of work. + + + + + Schedules an action to be executed. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + + + + Schedules an action to be executed after dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + Relative time after which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + + + + Schedules an action to be executed at dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + Absolute time at which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + + + + Gets the scheduler's notion of current time. + + + + + Scheduler with support for starting long-running tasks. + This type of scheduler can be used to run loops more efficiently instead of using recursive scheduling. + + + + + Schedules a long-running piece of work. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + + Notes to implementers + The returned disposable object should not prevent the work from starting, but only set the cancellation flag passed to the specified action. + + + + + Abstraction for a stopwatch to compute time relative to a starting point. + + + + + Gets the time elapsed since the stopwatch object was obtained. + + + + + Disposable resource with dipsosal state tracking. + + + + + Gets a value that indicates whether the object is disposed. + + + + + Represents a .NET event invocation consisting of the strongly typed object that raised the event and the data that was generated by the event. + + + The type of the sender that raised the event. + This type parameter is covariant. That is, you can use either the type you specified or any type that is more derived. For more information about covariance and contravariance, see Covariance and Contravariance in Generics. + + + The type of the event data generated by the event. + This type parameter is covariant. That is, you can use either the type you specified or any type that is more derived. For more information about covariance and contravariance, see Covariance and Contravariance in Generics. + + + + + Gets the sender object that raised the event. + + + + + Gets the event data that was generated by the event. + + + + + Represents a data stream signaling its elements by means of an event. + + The type of the event data generated by the event. + + + + Event signaling the next element in the data stream. + + + + + Represents a data stream signaling its elements by means of an event. + + + The type of the event data generated by the event. + This type parameter is covariant. That is, you can use either the type you specified or any type that is more derived. For more information about covariance and contravariance, see Covariance and Contravariance in Generics. + + + + + Event signaling the next element in the data stream. + + + + + Provides a mechanism for receiving push-based notifications and returning a response. + + + The type of the elements received by the observer. + This type parameter is contravariant. That is, you can use either the type you specified or any type that is less derived. For more information about covariance and contravariance, see Covariance and Contravariance in Generics. + + + The type of the result returned from the observer's notification handlers. + This type parameter is covariant. That is, you can use either the type you specified or any type that is more derived. For more information about covariance and contravariance, see Covariance and Contravariance in Generics. + + + + + Notifies the observer of a new element in the sequence. + + The new element in the sequence. + Result returned upon observation of a new element. + + + + Notifies the observer that an exception has occurred. + + The exception that occurred. + Result returned upon observation of an error. + + + + Notifies the observer of the end of the sequence. + + Result returned upon observation of the sequence completion. + + + + Represents an observable sequence of elements that have a common key. + + + The type of the key shared by all elements in the group. + This type parameter is covariant. That is, you can use either the type you specified or any type that is more derived. For more information about covariance and contravariance, see Covariance and Contravariance in Generics. + + + The type of the elements in the group. + This type parameter is covariant. That is, you can use either the type you specified or any type that is more derived. For more information about covariance and contravariance, see Covariance and Contravariance in Generics. + + + + + Gets the common key. + + + + + Provides functionality to evaluate queries against a specific data source wherein the type of the data is known. + + + The type of the data in the data source. + This type parameter is covariant. That is, you can use either the type you specified or any type that is more derived. For more information about covariance and contravariance, see Covariance and Contravariance in Generics. + + + + + Provides functionality to evaluate queries against a specific data source wherein the type of the data is not specified. + + + + + Gets the type of the element(s) that are returned when the expression tree associated with this instance of IQbservable is executed. + + + + + Gets the expression tree that is associated with the instance of IQbservable. + + + + + Gets the query provider that is associated with this data source. + + + + + Defines methods to create and execute queries that are described by an IQbservable object. + + + + + Constructs an IQbservable>TResult< object that can evaluate the query represented by a specified expression tree. + + The type of the elements of the System.Reactive.Linq.IQbservable<T> that is returned. + Expression tree representing the query. + IQbservable object that can evaluate the given query expression. + + + + Represents an observable wrapper that can be connected and disconnected from its underlying observable sequence. + + + The type of the elements in the sequence. + This type parameter is covariant. That is, you can use either the type you specified or any type that is more derived. For more information about covariance and contravariance, see Covariance and Contravariance in Generics. + + + + + Connects the observable wrapper to its source. All subscribed observers will receive values from the underlying observable sequence as long as the connection is established. + + Disposable used to disconnect the observable wrapper from its source, causing subscribed observer to stop receiving values from the underlying observable sequence. + + + + Represents an object that is both an observable sequence as well as an observer. + + The type of the elements processed by the subject. + + + + Represents an object that is both an observable sequence as well as an observer. + + + The type of the elements received by the subject. + This type parameter is contravariant. That is, you can use either the type you specified or any type that is less derived. For more information about covariance and contravariance, see Covariance and Contravariance in Generics. + + + The type of the elements produced by the subject. + This type parameter is covariant. That is, you can use either the type you specified or any type that is more derived. For more information about covariance and contravariance, see Covariance and Contravariance in Generics. + + + + diff --git a/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Interfaces.dll b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Interfaces.dll new file mode 100644 index 0000000000000000000000000000000000000000..6f92c9a61ad4a997b1673a65e4725c80ed2909fc GIT binary patch literal 24272 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 + + + System.Reactive.Linq + + + + + The System.Reactive.Joins namespace contains classes used to express join patterns over observable sequences using fluent method syntax. + + + + + Provides a set of extension methods for virtual time scheduling. + + + + + Schedules an action to be executed at dueTime. + + Absolute time representation type. + Relative time representation type. + Scheduler to execute the action on. + Relative time after which to execute the action. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + or is null. + + + + Schedules an action to be executed at dueTime. + + Absolute time representation type. + Relative time representation type. + Scheduler to execute the action on. + Absolute time at which to execute the action. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + or is null. + + + + Attribute applied to static classes providing expression tree forms of query methods, + mapping those to the corresponding methods for local query execution on the specified + target class type. + + + + + Creates a new mapping to the specified local execution query method implementation type. + + Type with query methods for local execution. + + + + Gets the type with the implementation of local query methods. + + + + + Provides a set of static methods for writing in-memory queries over observable sequences. + + + + + Invokes an action for each element in the observable sequence, and returns a Task object that will get signaled when the sequence terminates. + + The type of the elements in the source sequence. + Source sequence. + Action to invoke for each element in the observable sequence. + Task that signals the termination of the sequence. + or is null. + This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11. + + + + Invokes an action for each element in the observable sequence, and returns a Task object that will get signaled when the sequence terminates. + The loop can be quit prematurely by setting the specified cancellation token. + + The type of the elements in the source sequence. + Source sequence. + Action to invoke for each element in the observable sequence. + Cancellation token used to stop the loop. + Task that signals the termination of the sequence. + or is null. + This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11. + + + + Invokes an action for each element in the observable sequence, incorporating the element's index, and returns a Task object that will get signaled when the sequence terminates. + + The type of the elements in the source sequence. + Source sequence. + Action to invoke for each element in the observable sequence. + Task that signals the termination of the sequence. + or is null. + This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11. + + + + Invokes an action for each element in the observable sequence, incorporating the element's index, and returns a Task object that will get signaled when the sequence terminates. + The loop can be quit prematurely by setting the specified cancellation token. + + The type of the elements in the source sequence. + Source sequence. + Action to invoke for each element in the observable sequence. + Cancellation token used to stop the loop. + Task that signals the termination of the sequence. + or is null. + This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11. + + + + Uses to determine which source in to return, choosing if no match is found. + + The type of the value returned by the selector function, used to look up the resulting source. + The type of the elements in the result sequence. + Selector function invoked to determine the source to lookup in the dictionary. + Dictionary of sources to select from based on the invocation result. + Default source to select in case no matching source in is found. + The observable sequence retrieved from the dictionary based on the invocation result, or if no match is found. + or or is null. + + + + Uses to determine which source in to return, choosing an empty sequence on the specified scheduler if no match is found. + + The type of the value returned by the selector function, used to look up the resulting source. + The type of the elements in the result sequence. + Selector function invoked to determine the source to lookup in the dictionary. + Dictionary of sources to select from based on the invocation result. + Scheduler to generate an empty sequence on in case no matching source in is found. + The observable sequence retrieved from the dictionary based on the invocation result, or an empty sequence if no match is found. + or or is null. + + + + Uses to determine which source in to return, choosing an empty sequence if no match is found. + + The type of the value returned by the selector function, used to look up the resulting source. + The type of the elements in the result sequence. + Selector function invoked to determine the source to lookup in the dictionary. + Dictionary of sources to select from based on the invocation result. + The observable sequence retrieved from the dictionary based on the invocation result, or an empty sequence if no match is found. + or is null. + + + + Repeats the given as long as the specified holds, where the is evaluated after each repeated completed. + + The type of the elements in the source sequence. + Source to repeat as long as the function evaluates to true. + Condition that will be evaluated upon the completion of an iteration through the , to determine whether repetition of the source is required. + The observable sequence obtained by concatenating the sequence as long as the holds. + or is null. + + + + Concatenates the observable sequences obtained by running the for each element in the given enumerable . + + The type of the elements in the enumerable source sequence. + The type of the elements in the observable result sequence. + Enumerable source for which each element will be mapped onto an observable source that will be concatenated in the result sequence. + Function to select an observable source for each element in the . + The observable sequence obtained by concatenating the sources returned by for each element in the . + or is null. + + + + If the specified evaluates true, select the sequence. Otherwise, select the sequence. + + The type of the elements in the result sequence. + Condition evaluated to decide which sequence to return. + Sequence returned in case evaluates true. + Sequence returned in case evaluates false. + if evaluates true; otherwise. + or or is null. + + + + If the specified evaluates true, select the sequence. Otherwise, return an empty sequence. + + The type of the elements in the result sequence. + Condition evaluated to decide which sequence to return. + Sequence returned in case evaluates true. + if evaluates true; an empty sequence otherwise. + or is null. + + + + If the specified evaluates true, select the sequence. Otherwise, return an empty sequence generated on the specified scheduler. + + The type of the elements in the result sequence. + Condition evaluated to decide which sequence to return. + Sequence returned in case evaluates true. + Scheduler to generate an empty sequence on in case evaluates false. + if evaluates true; an empty sequence otherwise. + or or is null. + + + + Repeats the given as long as the specified holds, where the is evaluated before each repeated is subscribed to. + + The type of the elements in the source sequence. + Source to repeat as long as the function evaluates to true. + Condition that will be evaluated before subscription to the , to determine whether repetition of the source is required. + The observable sequence obtained by concatenating the sequence as long as the holds. + or is null. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the eighth argument passed to the begin delegate. + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the eighth argument passed to the begin delegate. + The type of the ninth argument passed to the begin delegate. + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the eighth argument passed to the begin delegate. + The type of the ninth argument passed to the begin delegate. + The type of the tenth argument passed to the begin delegate. + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the eighth argument passed to the begin delegate. + The type of the ninth argument passed to the begin delegate. + The type of the tenth argument passed to the begin delegate. + The type of the eleventh argument passed to the begin delegate. + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the eighth argument passed to the begin delegate. + The type of the ninth argument passed to the begin delegate. + The type of the tenth argument passed to the begin delegate. + The type of the eleventh argument passed to the begin delegate. + The type of the twelfth argument passed to the begin delegate. + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the eighth argument passed to the begin delegate. + The type of the ninth argument passed to the begin delegate. + The type of the tenth argument passed to the begin delegate. + The type of the eleventh argument passed to the begin delegate. + The type of the twelfth argument passed to the begin delegate. + The type of the thirteenth argument passed to the begin delegate. + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the eighth argument passed to the begin delegate. + The type of the ninth argument passed to the begin delegate. + The type of the tenth argument passed to the begin delegate. + The type of the eleventh argument passed to the begin delegate. + The type of the twelfth argument passed to the begin delegate. + The type of the thirteenth argument passed to the begin delegate. + The type of the fourteenth argument passed to the begin delegate. + The type of the result returned by the end delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the eighth argument passed to the begin delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the eighth argument passed to the begin delegate. + The type of the ninth argument passed to the begin delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the eighth argument passed to the begin delegate. + The type of the ninth argument passed to the begin delegate. + The type of the tenth argument passed to the begin delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the eighth argument passed to the begin delegate. + The type of the ninth argument passed to the begin delegate. + The type of the tenth argument passed to the begin delegate. + The type of the eleventh argument passed to the begin delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the eighth argument passed to the begin delegate. + The type of the ninth argument passed to the begin delegate. + The type of the tenth argument passed to the begin delegate. + The type of the eleventh argument passed to the begin delegate. + The type of the twelfth argument passed to the begin delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the eighth argument passed to the begin delegate. + The type of the ninth argument passed to the begin delegate. + The type of the tenth argument passed to the begin delegate. + The type of the eleventh argument passed to the begin delegate. + The type of the twelfth argument passed to the begin delegate. + The type of the thirteenth argument passed to the begin delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Converts a Begin/End invoke function pair into an asynchronous function. + + The type of the first argument passed to the begin delegate. + The type of the second argument passed to the begin delegate. + The type of the third argument passed to the begin delegate. + The type of the fourth argument passed to the begin delegate. + The type of the fifth argument passed to the begin delegate. + The type of the sixth argument passed to the begin delegate. + The type of the seventh argument passed to the begin delegate. + The type of the eighth argument passed to the begin delegate. + The type of the ninth argument passed to the begin delegate. + The type of the tenth argument passed to the begin delegate. + The type of the eleventh argument passed to the begin delegate. + The type of the twelfth argument passed to the begin delegate. + The type of the thirteenth argument passed to the begin delegate. + The type of the fourteenth argument passed to the begin delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + Function that can be used to start the asynchronous operation and retrieve the result (represented as a Unit value) as an observable sequence. + or is null. + Each invocation of the resulting function will cause the asynchronous operation to be started. Subscription to the resulting sequence has no observable side-effect, and each subscription will produce the asynchronous operation's result. + + + + Invokes the specified function asynchronously, surfacing the result through an observable sequence. + + The type of the result returned by the function. + Function to run asynchronously. + An observable sequence exposing the function's result value, or an exception. + is null. + + + The function is called immediately, not during the subscription of the resulting sequence. + Multiple subscriptions to the resulting sequence can observe the function's result. + + + + + + Invokes the specified function asynchronously on the specified scheduler, surfacing the result through an observable sequence + + The type of the result returned by the function. + Function to run asynchronously. + Scheduler to run the function on. + An observable sequence exposing the function's result value, or an exception. + or is null. + + + The function is called immediately, not during the subscription of the resulting sequence. + Multiple subscriptions to the resulting sequence can observe the function's result. + + + + + + Invokes the asynchronous function, surfacing the result through an observable sequence. + + The type of the result returned by the asynchronous function. + Asynchronous function to run. + An observable sequence exposing the function's result value, or an exception. + is null. + + + The function is started immediately, not during the subscription of the resulting sequence. + Multiple subscriptions to the resulting sequence can observe the function's result. + + + + + + Invokes the asynchronous function, surfacing the result through an observable sequence. + The CancellationToken is shared by all subscriptions on the resulting observable sequence. See the remarks section for more information. + + The type of the result returned by the asynchronous function. + Asynchronous function to run. + An observable sequence exposing the function's result value, or an exception. + is null. + + + The function is started immediately, not during the subscription of the resulting sequence. + Multiple subscriptions to the resulting sequence can observe the function's result. + + If any subscription to the resulting sequence is disposed, the CancellationToken is set. The observer associated to the disposed + subscription won't see the TaskCanceledException, but other observers will. You can protect against this using the Catch operator. + Be careful when handing out the resulting sequence because of this behavior. The most common use is to have a single subscription + to the resulting sequence, which controls the CancellationToken state. Alternatively, you can control subscription behavior using + multicast operators. + + + + + + + Invokes the action asynchronously, surfacing the result through an observable sequence. + + Action to run asynchronously. + An observable sequence exposing a Unit value upon completion of the action, or an exception. + is null. + + + The action is called immediately, not during the subscription of the resulting sequence. + Multiple subscriptions to the resulting sequence can observe the action's outcome. + + + + + + Invokes the action asynchronously on the specified scheduler, surfacing the result through an observable sequence. + + Action to run asynchronously. + Scheduler to run the action on. + An observable sequence exposing a Unit value upon completion of the action, or an exception. + or is null. + + + The action is called immediately, not during the subscription of the resulting sequence. + Multiple subscriptions to the resulting sequence can observe the action's outcome. + + + + + + Invokes the asynchronous action, surfacing the result through an observable sequence. + + Asynchronous action to run. + An observable sequence exposing a Unit value upon completion of the action, or an exception. + is null. + + + The action is started immediately, not during the subscription of the resulting sequence. + Multiple subscriptions to the resulting sequence can observe the action's outcome. + + + + + + Invokes the asynchronous action, surfacing the result through an observable sequence. + The CancellationToken is shared by all subscriptions on the resulting observable sequence. See the remarks section for more information. + + Asynchronous action to run. + An observable sequence exposing a Unit value upon completion of the action, or an exception. + is null. + + + The action is started immediately, not during the subscription of the resulting sequence. + Multiple subscriptions to the resulting sequence can observe the action's outcome. + + If any subscription to the resulting sequence is disposed, the CancellationToken is set. The observer associated to the disposed + subscription won't see the TaskCanceledException, but other observers will. You can protect against this using the Catch operator. + Be careful when handing out the resulting sequence because of this behavior. The most common use is to have a single subscription + to the resulting sequence, which controls the CancellationToken state. Alternatively, you can control subscription behavior using + multicast operators. + + + + + + + Converts to asynchronous function into an observable sequence. Each subscription to the resulting sequence causes the function to be started. + + The type of the result returned by the asynchronous function. + Asynchronous function to convert. + An observable sequence exposing the result of invoking the function, or an exception. + is null. + + + + Converts to asynchronous function into an observable sequence. Each subscription to the resulting sequence causes the function to be started. + The CancellationToken passed to the asynchronous function is tied to the observable sequence's subscription that triggered the function's invocation and can be used for best-effort cancellation. + + The type of the result returned by the asynchronous function. + Asynchronous function to convert. + An observable sequence exposing the result of invoking the function, or an exception. + is null. + When a subscription to the resulting sequence is disposed, the CancellationToken that was fed to the asynchronous function will be signaled. + + + + Converts to asynchronous action into an observable sequence. Each subscription to the resulting sequence causes the action to be started. + + Asynchronous action to convert. + An observable sequence exposing a Unit value upon completion of the action, or an exception. + is null. + + + + Converts to asynchronous action into an observable sequence. Each subscription to the resulting sequence causes the action to be started. + The CancellationToken passed to the asynchronous action is tied to the observable sequence's subscription that triggered the action's invocation and can be used for best-effort cancellation. + + Asynchronous action to convert. + An observable sequence exposing a Unit value upon completion of the action, or an exception. + When a subscription to the resulting sequence is disposed, the CancellationToken that was fed to the asynchronous function will be signaled. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the tenth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the tenth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the tenth argument passed to the function. + The type of the eleventh argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the tenth argument passed to the function. + The type of the eleventh argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the tenth argument passed to the function. + The type of the eleventh argument passed to the function. + The type of the twelfth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the tenth argument passed to the function. + The type of the eleventh argument passed to the function. + The type of the twelfth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the tenth argument passed to the function. + The type of the eleventh argument passed to the function. + The type of the twelfth argument passed to the function. + The type of the thirteenth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the tenth argument passed to the function. + The type of the eleventh argument passed to the function. + The type of the twelfth argument passed to the function. + The type of the thirteenth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the tenth argument passed to the function. + The type of the eleventh argument passed to the function. + The type of the twelfth argument passed to the function. + The type of the thirteenth argument passed to the function. + The type of the fourteenth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the tenth argument passed to the function. + The type of the eleventh argument passed to the function. + The type of the twelfth argument passed to the function. + The type of the thirteenth argument passed to the function. + The type of the fourteenth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the tenth argument passed to the function. + The type of the eleventh argument passed to the function. + The type of the twelfth argument passed to the function. + The type of the thirteenth argument passed to the function. + The type of the fourteenth argument passed to the function. + The type of the fifteenth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the tenth argument passed to the function. + The type of the eleventh argument passed to the function. + The type of the twelfth argument passed to the function. + The type of the thirteenth argument passed to the function. + The type of the fourteenth argument passed to the function. + The type of the fifteenth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the tenth argument passed to the function. + The type of the eleventh argument passed to the function. + The type of the twelfth argument passed to the function. + The type of the thirteenth argument passed to the function. + The type of the fourteenth argument passed to the function. + The type of the fifteenth argument passed to the function. + The type of the sixteenth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Asynchronous function. + is null. + + + + Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. + + The type of the first argument passed to the function. + The type of the second argument passed to the function. + The type of the third argument passed to the function. + The type of the fourth argument passed to the function. + The type of the fifth argument passed to the function. + The type of the sixth argument passed to the function. + The type of the seventh argument passed to the function. + The type of the eighth argument passed to the function. + The type of the ninth argument passed to the function. + The type of the tenth argument passed to the function. + The type of the eleventh argument passed to the function. + The type of the twelfth argument passed to the function. + The type of the thirteenth argument passed to the function. + The type of the fourteenth argument passed to the function. + The type of the fifteenth argument passed to the function. + The type of the sixteenth argument passed to the function. + The type of the result returned by the function. + Function to convert to an asynchronous function. + Scheduler to invoke the original function on. + Asynchronous function. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + The type of the tenth argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + The type of the tenth argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + The type of the tenth argument passed to the action. + The type of the eleventh argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + The type of the tenth argument passed to the action. + The type of the eleventh argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + The type of the tenth argument passed to the action. + The type of the eleventh argument passed to the action. + The type of the twelfth argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + The type of the tenth argument passed to the action. + The type of the eleventh argument passed to the action. + The type of the twelfth argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + The type of the tenth argument passed to the action. + The type of the eleventh argument passed to the action. + The type of the twelfth argument passed to the action. + The type of the thirteenth argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + The type of the tenth argument passed to the action. + The type of the eleventh argument passed to the action. + The type of the twelfth argument passed to the action. + The type of the thirteenth argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + The type of the tenth argument passed to the action. + The type of the eleventh argument passed to the action. + The type of the twelfth argument passed to the action. + The type of the thirteenth argument passed to the action. + The type of the fourteenth argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + The type of the tenth argument passed to the action. + The type of the eleventh argument passed to the action. + The type of the twelfth argument passed to the action. + The type of the thirteenth argument passed to the action. + The type of the fourteenth argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + The type of the tenth argument passed to the action. + The type of the eleventh argument passed to the action. + The type of the twelfth argument passed to the action. + The type of the thirteenth argument passed to the action. + The type of the fourteenth argument passed to the action. + The type of the fifteenth argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + The type of the tenth argument passed to the action. + The type of the eleventh argument passed to the action. + The type of the twelfth argument passed to the action. + The type of the thirteenth argument passed to the action. + The type of the fourteenth argument passed to the action. + The type of the fifteenth argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the default scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + The type of the tenth argument passed to the action. + The type of the eleventh argument passed to the action. + The type of the twelfth argument passed to the action. + The type of the thirteenth argument passed to the action. + The type of the fourteenth argument passed to the action. + The type of the fifteenth argument passed to the action. + The type of the sixteenth argument passed to the action. + Action to convert to an asynchronous action. + Asynchronous action. + is null. + + + + Converts the function into an asynchronous action. Each invocation of the resulting asynchronous action causes an invocation of the original synchronous action on the specified scheduler. + + The type of the first argument passed to the action. + The type of the second argument passed to the action. + The type of the third argument passed to the action. + The type of the fourth argument passed to the action. + The type of the fifth argument passed to the action. + The type of the sixth argument passed to the action. + The type of the seventh argument passed to the action. + The type of the eighth argument passed to the action. + The type of the ninth argument passed to the action. + The type of the tenth argument passed to the action. + The type of the eleventh argument passed to the action. + The type of the twelfth argument passed to the action. + The type of the thirteenth argument passed to the action. + The type of the fourteenth argument passed to the action. + The type of the fifteenth argument passed to the action. + The type of the sixteenth argument passed to the action. + Action to convert to an asynchronous action. + Scheduler to invoke the original action on. + Asynchronous action. + or is null. + + + + Converts a .NET event, conforming to the standard .NET event pattern based on , to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEventPattern, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEventPattern, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts a .NET event, conforming to the standard .NET event pattern based on , to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEventPattern that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Converts a .NET event, conforming to the standard .NET event pattern based on a supplied event delegate type, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The delegate type of the event to be converted. + The type of the event data generated by the event. + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEventPattern, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEventPattern, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts a .NET event, conforming to the standard .NET event pattern based on a supplied event delegate type, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The delegate type of the event to be converted. + The type of the event data generated by the event. + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEventPattern that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Converts a .NET event, conforming to the standard .NET event pattern based on , to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The delegate type of the event to be converted. + The type of the event data generated by the event. + A function used to convert the given event handler to a delegate compatible with the underlying .NET event. The resulting delegate is used in calls to the addHandler and removeHandler action parameters. + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEventPattern, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEventPattern, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts a .NET event, conforming to the standard .NET event pattern based on , to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The delegate type of the event to be converted. + The type of the event data generated by the event. + A function used to convert the given event handler to a delegate compatible with the underlying .NET event. The resulting delegate is used in calls to the addHandler and removeHandler action parameters. + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or or or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEventPattern that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Converts a .NET event, conforming to the standard .NET event pattern based on a supplied event delegate type with a strongly typed sender parameter, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The delegate type of the event to be converted. + The type of the sender that raises the event. + The type of the event data generated by the event. + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEventPattern, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEventPattern, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts a .NET event, conforming to the standard .NET event pattern based on a supplied event delegate type with a strongly typed sender parameter, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The delegate type of the event to be converted. + The type of the sender that raises the event. + The type of the event data generated by the event. + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEventPattern that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Converts a .NET event, conforming to the standard .NET event pattern based on , to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The type of the event data generated by the event. + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The observable sequence that contains data representations of invocations of the underlying .NET event. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEventPattern, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEventPattern, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts a .NET event, conforming to the standard .NET event pattern based on , to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The type of the event data generated by the event. + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains data representations of invocations of the underlying .NET event. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEventPattern that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Converts an instance .NET event, conforming to the standard .NET event pattern with an parameter, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + Reflection is used to discover the event based on the target object type and the specified event name. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + Object instance that exposes the event to convert. + Name of the event to convert. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or is null. + The event could not be found. -or- The event does not conform to the standard .NET event pattern. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEventPattern, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEventPattern, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts an instance .NET event, conforming to the standard .NET event pattern with an parameter, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + Reflection is used to discover the event based on the target object type and the specified event name. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + Object instance that exposes the event to convert. + Name of the event to convert. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or or is null. + The event could not be found. -or- The event does not conform to the standard .NET event pattern. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEventPattern that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Converts an instance .NET event, conforming to the standard .NET event pattern with strongly typed event arguments, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + Reflection is used to discover the event based on the target object type and the specified event name. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The type of the event data generated by the event. + Object instance that exposes the event to convert. + Name of the event to convert. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or is null. + The event could not be found. -or- The event does not conform to the standard .NET event pattern. -or- The event's second argument type is not assignable to TEventArgs. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEventPattern, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEventPattern, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts an instance .NET event, conforming to the standard .NET event pattern with strongly typed event arguments, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + Reflection is used to discover the event based on the target object type and the specified event name. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The type of the event data generated by the event. + Object instance that exposes the event to convert. + Name of the event to convert. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or or is null. + The event could not be found. -or- The event does not conform to the standard .NET event pattern. -or- The event's second argument type is not assignable to TEventArgs. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEventPattern that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Converts an instance .NET event, conforming to the standard .NET event pattern with a strongly typed sender and strongly typed event arguments, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + Reflection is used to discover the event based on the target object type and the specified event name. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The type of the sender that raises the event. + The type of the event data generated by the event. + Object instance that exposes the event to convert. + Name of the event to convert. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or is null. + The event could not be found. -or- The event does not conform to the standard .NET event pattern. -or- The event's first argument type is not assignable to TSender. -or- The event's second argument type is not assignable to TEventArgs. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEventPattern, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEventPattern, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts an instance .NET event, conforming to the standard .NET event pattern with a strongly typed sender and strongly typed event arguments, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + Reflection is used to discover the event based on the target object type and the specified event name. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The type of the sender that raises the event. + The type of the event data generated by the event. + Object instance that exposes the event to convert. + Name of the event to convert. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or or is null. + The event could not be found. -or- The event does not conform to the standard .NET event pattern. -or- The event's first argument type is not assignable to TSender. -or- The event's second argument type is not assignable to TEventArgs. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEventPattern that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Converts a static .NET event, conforming to the standard .NET event pattern with an parameter, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + Reflection is used to discover the event based on the specified type and the specified event name. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + Type that exposes the static event to convert. + Name of the event to convert. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or is null. + The event could not be found. -or- The event does not conform to the standard .NET event pattern. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEventPattern, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEventPattern, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts a static .NET event, conforming to the standard .NET event pattern with an parameter, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + Reflection is used to discover the event based on the specified type and the specified event name. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + Type that exposes the static event to convert. + Name of the event to convert. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or or is null. + The event could not be found. -or- The event does not conform to the standard .NET event pattern. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEventPattern that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Converts a static .NET event, conforming to the standard .NET event pattern with strongly typed event arguments, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + Reflection is used to discover the event based on the specified type and the specified event name. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The type of the event data generated by the event. + Type that exposes the static event to convert. + Name of the event to convert. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or is null. + The event could not be found. -or- The event does not conform to the standard .NET event pattern. -or- The event's second argument type is not assignable to TEventArgs. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEventPattern, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEventPattern, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts a static .NET event, conforming to the standard .NET event pattern with strongly typed event arguments, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + Reflection is used to discover the event based on the specified type and the specified event name. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The type of the event data generated by the event. + Type that exposes the static event to convert. + Name of the event to convert. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or or is null. + The event could not be found. -or- The event does not conform to the standard .NET event pattern. -or- The event's second argument type is not assignable to TEventArgs. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEventPattern that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Converts a static .NET event, conforming to the standard .NET event pattern with a strongly typed sender and strongly typed event arguments, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + Reflection is used to discover the event based on the specified type and the specified event name. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The type of the sender that raises the event. + The type of the event data generated by the event. + Type that exposes the static event to convert. + Name of the event to convert. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or is null. + The event could not be found. -or- The event does not conform to the standard .NET event pattern. -or- The event's first argument type is not assignable to TSender. -or- The event's second argument type is not assignable to TEventArgs. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEventPattern, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEventPattern, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts a static .NET event, conforming to the standard .NET event pattern with a strongly typed sender and strongly typed event arguments, to an observable sequence. + Each event invocation is surfaced through an OnNext message in the resulting sequence. + Reflection is used to discover the event based on the specified type and the specified event name. + For conversion of events that don't conform to the standard .NET event pattern, use any of the FromEvent overloads instead. + + The type of the sender that raises the event. + The type of the event data generated by the event. + Type that exposes the static event to convert. + Name of the event to convert. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains data representations of invocations of the underlying .NET event. + or or is null. + The event could not be found. -or- The event does not conform to the standard .NET event pattern. -or- The event's first argument type is not assignable to TSender. -or- The event's second argument type is not assignable to TEventArgs. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEventPattern calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEventPattern that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Converts a .NET event to an observable sequence, using a conversion function to obtain the event delegate. Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events conforming to the standard .NET event pattern, use any of the FromEventPattern overloads instead. + + The delegate type of the event to be converted. + The type of the event data generated by the event. + A function used to convert the given event handler to a delegate compatible with the underlying .NET event. The resulting delegate is used in calls to the addHandler and removeHandler action parameters. + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The observable sequence that contains the event argument objects passed to the invocations of the underlying .NET event. + or or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEvent, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEvent, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEvent calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts a .NET event to an observable sequence, using a conversion function to obtain the event delegate. Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events conforming to the standard .NET event pattern, use any of the FromEventPattern overloads instead. + + The delegate type of the event to be converted. + The type of the event data generated by the event. + A function used to convert the given event handler to a delegate compatible with the underlying .NET event. The resulting delegate is used in calls to the addHandler and removeHandler action parameters. + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains the event argument objects passed to the invocations of the underlying .NET event. + or or or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEvent calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEvent that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Converts a .NET event to an observable sequence, using a supplied event delegate type. Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events conforming to the standard .NET event pattern, use any of the FromEventPattern overloads instead. + + The delegate type of the event to be converted. + The type of the event data generated by the event. + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The observable sequence that contains the event argument objects passed to the invocations of the underlying .NET event. + or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEvent, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEvent, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEvent calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts a .NET event to an observable sequence, using a supplied event delegate type. Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events conforming to the standard .NET event pattern, use any of the FromEventPattern overloads instead. + + The delegate type of the event to be converted. + The type of the event data generated by the event. + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains the event argument objects passed to the invocations of the underlying .NET event. + or or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEvent calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEvent that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Converts a generic Action-based .NET event to an observable sequence. Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events conforming to the standard .NET event pattern, use any of the FromEventPattern overloads instead. + + The type of the event data generated by the event. + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The observable sequence that contains the event argument objects passed to the invocations of the underlying .NET event. + or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEvent, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEvent, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEvent calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts a generic Action-based .NET event to an observable sequence. Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events conforming to the standard .NET event pattern, use any of the FromEventPattern overloads instead. + + The type of the event data generated by the event. + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains the event argument objects passed to the invocations of the underlying .NET event. + or or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEvent calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEvent that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Converts an Action-based .NET event to an observable sequence. Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events conforming to the standard .NET event pattern, use any of the FromEventPattern overloads instead. + + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The observable sequence that contains the event argument objects passed to the invocations of the underlying .NET event. + or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + The current is captured during the call to FromEvent, and is used to post add and remove handler invocations. + This behavior ensures add and remove handler operations for thread-affine events are accessed from the same context, as required by some UI frameworks. + + + If no SynchronizationContext is present at the point of calling FromEvent, add and remove handler invocations are made synchronously on the thread + making the Subscribe or Dispose call, respectively. + + + It's recommended to lift FromEvent calls outside event stream query expressions due to the free-threaded nature of Reactive Extensions. Doing so + makes the captured SynchronizationContext predictable. This best practice also reduces clutter of bridging code inside queries, making the query expressions + more concise and easier to understand. + + + + + + + Converts an Action-based .NET event to an observable sequence. Each event invocation is surfaced through an OnNext message in the resulting sequence. + For conversion of events conforming to the standard .NET event pattern, use any of the FromEventPattern overloads instead. + + Action that attaches the given event handler to the underlying .NET event. + Action that detaches the given event handler from the underlying .NET event. + The scheduler to run the add and remove event handler logic on. + The observable sequence that contains the event argument objects passed to the invocations of the underlying .NET event. + or or is null. + + + Add and remove handler invocations are made whenever the number of observers grows beyond zero. + As such, an event handler may be shared by multiple simultaneously active observers, using a subject for multicasting. + + + Add and remove handler invocations are run on the specified scheduler. This behavior allows add and remove handler operations for thread-affine events to be + accessed from the same context, as required by some UI frameworks. + + + It's recommended to lift FromEvent calls outside event stream query expressions. This best practice reduces clutter of bridging code inside queries, + making the query expressions more concise and easier to understand. This has additional benefits for overloads of FromEvent that omit the IScheduler + parameter. For more information, see the remarks section on those overloads. + + + + + + + Applies an accumulator function over an observable sequence, returning the result of the aggregation as a single element in the result sequence. The specified seed value is used as the initial accumulator value. + For aggregation behavior with incremental intermediate results, see . + + The type of the elements in the source sequence. + The type of the result of the aggregation. + An observable sequence to aggregate over. + The initial accumulator value. + An accumulator function to be invoked on each element. + An observable sequence containing a single element with the final accumulator value. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Applies an accumulator function over an observable sequence, returning the result of the aggregation as a single element in the result sequence. The specified seed value is used as the initial accumulator value, + and the specified result selector function is used to select the result value. + + The type of the elements in the source sequence. + The type of the accumulator value. + The type of the resulting value. + An observable sequence to aggregate over. + The initial accumulator value. + An accumulator function to be invoked on each element. + A function to transform the final accumulator value into the result value. + An observable sequence containing a single element with the final accumulator value. + or or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Applies an accumulator function over an observable sequence, returning the result of the aggregation as a single element in the result sequence. + For aggregation behavior with incremental intermediate results, see . + + The type of the elements in the source sequence and the result of the aggregation. + An observable sequence to aggregate over. + An accumulator function to be invoked on each element. + An observable sequence containing a single element with the final accumulator value. + or is null. + (Asynchronous) The source sequence is empty. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Determines whether all elements of an observable sequence satisfy a condition. + + The type of the elements in the source sequence. + An observable sequence whose elements to apply the predicate to. + A function to test each element for a condition. + An observable sequence containing a single element determining whether all elements in the source sequence pass the test in the specified predicate. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Determines whether an observable sequence contains any elements. + + The type of the elements in the source sequence. + An observable sequence to check for non-emptiness. + An observable sequence containing a single element determining whether the source sequence contains any elements. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Determines whether any element of an observable sequence satisfies a condition. + + The type of the elements in the source sequence. + An observable sequence whose elements to apply the predicate to. + A function to test each element for a condition. + An observable sequence containing a single element determining whether any elements in the source sequence pass the test in the specified predicate. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of values. + + A sequence of values to calculate the average of. + An observable sequence containing a single element with the average of the sequence of values. + is null. + (Asynchronous) The source sequence is empty. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of values. + + A sequence of values to calculate the average of. + An observable sequence containing a single element with the average of the sequence of values. + is null. + (Asynchronous) The source sequence is empty. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of values. + + A sequence of values to calculate the average of. + An observable sequence containing a single element with the average of the sequence of values. + is null. + (Asynchronous) The source sequence is empty. + (Asynchronous) The sum of the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of values. + + A sequence of values to calculate the average of. + An observable sequence containing a single element with the average of the sequence of values. + is null. + (Asynchronous) The source sequence is empty. + (Asynchronous) The sum of the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of values. + + A sequence of values to calculate the average of. + An observable sequence containing a single element with the average of the sequence of values. + is null. + (Asynchronous) The source sequence is empty. + (Asynchronous) The sum of the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of nullable values. + + A sequence of nullable values to calculate the average of. + An observable sequence containing a single element with the average of the sequence of values, or null if the source sequence is empty or contains only values that are null. + is null. + (Asynchronous) The source sequence is empty. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of nullable values. + + A sequence of nullable values to calculate the average of. + An observable sequence containing a single element with the average of the sequence of values, or null if the source sequence is empty or contains only values that are null. + is null. + (Asynchronous) The source sequence is empty. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of nullable values. + + A sequence of nullable values to calculate the average of. + An observable sequence containing a single element with the average of the sequence of values, or null if the source sequence is empty or contains only values that are null. + is null. + (Asynchronous) The source sequence is empty. + (Asynchronous) The sum of the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of nullable values. + + A sequence of nullable values to calculate the average of. + An observable sequence containing a single element with the average of the sequence of values, or null if the source sequence is empty or contains only values that are null. + is null. + (Asynchronous) The source sequence is empty. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + (Asynchronous) The sum of the elements in the source sequence is larger than . + + + + Computes the average of an observable sequence of nullable values. + + A sequence of nullable values to calculate the average of. + An observable sequence containing a single element with the average of the sequence of values, or null if the source sequence is empty or contains only values that are null. + is null. + (Asynchronous) The source sequence is empty. + (Asynchronous) The sum of the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values to calculate the average of. + A transform function to apply to each element. + An observable sequence containing a single element with the average of the sequence of values. + or is null. + (Asynchronous) The source sequence is empty. + (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values to calculate the average of. + A transform function to apply to each element. + An observable sequence containing a single element with the average of the sequence of values. + or is null. + (Asynchronous) The source sequence is empty. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values to calculate the average of. + A transform function to apply to each element. + An observable sequence containing a single element with the average of the sequence of values. + or is null. + (Asynchronous) The source sequence is empty. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values to calculate the average of. + A transform function to apply to each element. + An observable sequence containing a single element with the average of the sequence of values. + or is null. + (Asynchronous) The source sequence is empty. + (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values to calculate the average of. + A transform function to apply to each element. + An observable sequence containing a single element with the average of the sequence of values. + or is null. + (Asynchronous) The source sequence is empty. + (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values to calculate the average of. + A transform function to apply to each element. + An observable sequence containing a single element with the average of the sequence of values, or null if the source sequence is empty or contains only values that are null. + or is null. + (Asynchronous) The source sequence is empty. + (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values to calculate the average of. + A transform function to apply to each element. + An observable sequence containing a single element with the average of the sequence of values, or null if the source sequence is empty or contains only values that are null. + or is null. + (Asynchronous) The source sequence is empty. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values to calculate the average of. + A transform function to apply to each element. + An observable sequence containing a single element with the average of the sequence of values, or null if the source sequence is empty or contains only values that are null. + or is null. + (Asynchronous) The source sequence is empty. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values to calculate the average of. + A transform function to apply to each element. + An observable sequence containing a single element with the average of the sequence of values, or null if the source sequence is empty or contains only values that are null. + or is null. + (Asynchronous) The source sequence is empty. + (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the average of an observable sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values to calculate the average of. + A transform function to apply to each element. + An observable sequence containing a single element with the average of the sequence of values, or null if the source sequence is empty or contains only values that are null. + or is null. + (Asynchronous) The source sequence is empty. + (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Determines whether an observable sequence contains a specified element by using the default equality comparer. + + The type of the elements in the source sequence. + An observable sequence in which to locate a value. + The value to locate in the source sequence. + An observable sequence containing a single element determining whether the source sequence contains an element that has the specified value. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Determines whether an observable sequence contains a specified element by using a specified System.Collections.Generic.IEqualityComparer<T>. + + The type of the elements in the source sequence. + An observable sequence in which to locate a value. + The value to locate in the source sequence. + An equality comparer to compare elements. + An observable sequence containing a single element determining whether the source sequence contains an element that has the specified value. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns an observable sequence containing an that represents the total number of elements in an observable sequence. + + The type of the elements in the source sequence. + An observable sequence that contains elements to be counted. + An observable sequence containing a single element with the number of elements in the input sequence. + is null. + (Asynchronous) The number of elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns an observable sequence containing an that represents how many elements in the specified observable sequence satisfy a condition. + + The type of the elements in the source sequence. + An observable sequence that contains elements to be counted. + A function to test each element for a condition. + An observable sequence containing a single element with a number that represents how many elements in the input sequence satisfy the condition in the predicate function. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the element at a specified index in a sequence. + + The type of the elements in the source sequence. + Observable sequence to return the element from. + The zero-based index of the element to retrieve. + An observable sequence that produces the element at the specified position in the source sequence. + is null. + is less than zero. + (Asynchronous) is greater than or equal to the number of elements in the source sequence. + + + + Returns the element at a specified index in a sequence or a default value if the index is out of range. + + The type of the elements in the source sequence. + Observable sequence to return the element from. + The zero-based index of the element to retrieve. + An observable sequence that produces the element at the specified position in the source sequence, or a default value if the index is outside the bounds of the source sequence. + is null. + is less than zero. + + + + Returns the first element of an observable sequence. + + The type of the elements in the source sequence. + Source observable sequence. + Sequence containing the first element in the observable sequence. + is null. + (Asynchronous) The source sequence is empty. + + + + Returns the first element of an observable sequence that satisfies the condition in the predicate. + + The type of the elements in the source sequence. + Source observable sequence. + A predicate function to evaluate for elements in the source sequence. + Sequence containing the first element in the observable sequence that satisfies the condition in the predicate. + or is null. + (Asynchronous) No element satisfies the condition in the predicate. -or- The source sequence is empty. + + + + Returns the first element of an observable sequence, or a default value if no such element exists. + + The type of the elements in the source sequence. + Source observable sequence. + Sequence containing the first element in the observable sequence, or a default value if no such element exists. + is null. + + + + Returns the first element of an observable sequence that satisfies the condition in the predicate, or a default value if no such element exists. + + The type of the elements in the source sequence. + Source observable sequence. + A predicate function to evaluate for elements in the source sequence. + Sequence containing the first element in the observable sequence that satisfies the condition in the predicate, or a default value if no such element exists. + or is null. + + + + Determines whether an observable sequence is empty. + + The type of the elements in the source sequence. + An observable sequence to check for emptiness. + An observable sequence containing a single element determining whether the source sequence is empty. + is null. + + + + Returns the last element of an observable sequence. + + The type of the elements in the source sequence. + Source observable sequence. + Sequence containing the last element in the observable sequence. + is null. + (Asynchronous) The source sequence is empty. + + + + Returns the last element of an observable sequence that satisfies the condition in the predicate. + + The type of the elements in the source sequence. + Source observable sequence. + A predicate function to evaluate for elements in the source sequence. + Sequence containing the last element in the observable sequence that satisfies the condition in the predicate. + or is null. + (Asynchronous) No element satisfies the condition in the predicate. -or- The source sequence is empty. + + + + Returns the last element of an observable sequence, or a default value if no such element exists. + + The type of the elements in the source sequence. + Source observable sequence. + Sequence containing the last element in the observable sequence, or a default value if no such element exists. + is null. + + + + Returns the last element of an observable sequence that satisfies the condition in the predicate, or a default value if no such element exists. + + The type of the elements in the source sequence. + Source observable sequence. + A predicate function to evaluate for elements in the source sequence. + Sequence containing the last element in the observable sequence that satisfies the condition in the predicate, or a default value if no such element exists. + or is null. + + + + Returns an observable sequence containing an that represents the total number of elements in an observable sequence. + + The type of the elements in the source sequence. + An observable sequence that contains elements to be counted. + An observable sequence containing a single element with the number of elements in the input sequence. + is null. + (Asynchronous) The number of elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns an observable sequence containing an that represents how many elements in the specified observable sequence satisfy a condition. + + The type of the elements in the source sequence. + An observable sequence that contains elements to be counted. + A function to test each element for a condition. + An observable sequence containing a single element with a number that represents how many elements in the input sequence satisfy the condition in the predicate function. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the maximum element in an observable sequence. + + The type of the elements in the source sequence. + An observable sequence to determine the maximum element of. + An observable sequence containing a single element with the maximum element in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the maximum value in an observable sequence according to the specified comparer. + + The type of the elements in the source sequence. + An observable sequence to determine the maximum element of. + Comparer used to compare elements. + An observable sequence containing a single element with the maximum element in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the maximum value in an observable sequence of values. + + A sequence of values to determine the maximum value of. + An observable sequence containing a single element with the maximum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the maximum value in an observable sequence of values. + + A sequence of values to determine the maximum value of. + An observable sequence containing a single element with the maximum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the maximum value in an observable sequence of values. + + A sequence of values to determine the maximum value of. + An observable sequence containing a single element with the maximum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the maximum value in an observable sequence of values. + + A sequence of values to determine the maximum value of. + An observable sequence containing a single element with the maximum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the maximum value in an observable sequence of values. + + A sequence of values to determine the maximum value of. + An observable sequence containing a single element with the maximum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the maximum value in an observable sequence of nullable values. + + A sequence of nullable values to determine the maximum value of. + An observable sequence containing a single element with the maximum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the maximum value in an observable sequence of nullable values. + + A sequence of nullable values to determine the maximum value of. + An observable sequence containing a single element with the maximum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the maximum value in an observable sequence of nullable values. + + A sequence of nullable values to determine the maximum value of. + An observable sequence containing a single element with the maximum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the maximum value in an observable sequence of nullable values. + + A sequence of nullable values to determine the maximum value of. + An observable sequence containing a single element with the maximum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the maximum value in an observable sequence of nullable values. + + A sequence of nullable values to determine the maximum value of. + An observable sequence containing a single element with the maximum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the maximum value. + + The type of the elements in the source sequence. + The type of the objects derived from the elements in the source sequence to determine the maximum of. + An observable sequence to determine the mimimum element of. + A transform function to apply to each element. + An observable sequence containing a single element with the value that corresponds to the maximum element in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the maximum value according to the specified comparer. + + The type of the elements in the source sequence. + The type of the objects derived from the elements in the source sequence to determine the maximum of. + An observable sequence to determine the mimimum element of. + A transform function to apply to each element. + Comparer used to compare elements. + An observable sequence containing a single element with the value that corresponds to the maximum element in the source sequence. + or or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the maximum value. + + The type of the elements in the source sequence. + A sequence of values to determine the maximum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the maximum value. + + The type of the elements in the source sequence. + A sequence of values to determine the maximum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the maximum value. + + The type of the elements in the source sequence. + A sequence of values to determine the maximum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the maximum value. + + The type of the elements in the source sequence. + A sequence of values to determine the maximum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the maximum value. + + The type of the elements in the source sequence. + A sequence of values to determine the maximum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the maximum nullable value. + + The type of the elements in the source sequence. + A sequence of values to determine the maximum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the maximum nullable value. + + The type of the elements in the source sequence. + A sequence of values to determine the maximum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the maximum nullable value. + + The type of the elements in the source sequence. + A sequence of values to determine the maximum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the maximum nullable value. + + The type of the elements in the source sequence. + A sequence of values to determine the maximum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the maximum nullable value. + + The type of the elements in the source sequence. + A sequence of values to determine the maximum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the elements in an observable sequence with the maximum key value. + + The type of the elements in the source sequence. + The type of the key computed for each element in the source sequence. + An observable sequence to get the maximum elements for. + Key selector function. + An observable sequence containing a list of zero or more elements that have a maximum key value. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the elements in an observable sequence with the maximum key value according to the specified comparer. + + The type of the elements in the source sequence. + The type of the key computed for each element in the source sequence. + An observable sequence to get the maximum elements for. + Key selector function. + Comparer used to compare key values. + An observable sequence containing a list of zero or more elements that have a maximum key value. + or or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the minimum element in an observable sequence. + + The type of the elements in the source sequence. + An observable sequence to determine the mimimum element of. + An observable sequence containing a single element with the minimum element in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the minimum element in an observable sequence according to the specified comparer. + + The type of the elements in the source sequence. + An observable sequence to determine the mimimum element of. + Comparer used to compare elements. + An observable sequence containing a single element with the minimum element in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the minimum value in an observable sequence of values. + + A sequence of values to determine the minimum value of. + An observable sequence containing a single element with the minimum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the minimum value in an observable sequence of values. + + A sequence of values to determine the minimum value of. + An observable sequence containing a single element with the minimum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the minimum value in an observable sequence of values. + + A sequence of values to determine the minimum value of. + An observable sequence containing a single element with the minimum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the minimum value in an observable sequence of values. + + A sequence of values to determine the minimum value of. + An observable sequence containing a single element with the minimum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the minimum value in an observable sequence of values. + + A sequence of values to determine the minimum value of. + An observable sequence containing a single element with the minimum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the minimum value in an observable sequence of nullable values. + + A sequence of nullable values to determine the minimum value of. + An observable sequence containing a single element with the minimum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the minimum value in an observable sequence of nullable values. + + A sequence of nullable values to determine the minimum value of. + An observable sequence containing a single element with the minimum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the minimum value in an observable sequence of nullable values. + + A sequence of nullable values to determine the minimum value of. + An observable sequence containing a single element with the minimum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the minimum value in an observable sequence of nullable values. + + A sequence of nullable values to determine the minimum value of. + An observable sequence containing a single element with the minimum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the minimum value in an observable sequence of nullable values. + + A sequence of nullable values to determine the minimum value of. + An observable sequence containing a single element with the minimum value in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the minimum value. + + The type of the elements in the source sequence. + The type of the objects derived from the elements in the source sequence to determine the minimum of. + An observable sequence to determine the mimimum element of. + A transform function to apply to each element. + An observable sequence containing a single element with the value that corresponds to the minimum element in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the minimum value according to the specified comparer. + + The type of the elements in the source sequence. + The type of the objects derived from the elements in the source sequence to determine the minimum of. + An observable sequence to determine the mimimum element of. + A transform function to apply to each element. + Comparer used to compare elements. + An observable sequence containing a single element with the value that corresponds to the minimum element in the source sequence. + or or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the minimum value. + + The type of the elements in the source sequence. + A sequence of values to determine the minimum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the minimum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the minimum value. + + The type of the elements in the source sequence. + A sequence of values to determine the minimum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the minimum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the minimum value. + + The type of the elements in the source sequence. + A sequence of values to determine the minimum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the minimum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the minimum value. + + The type of the elements in the source sequence. + A sequence of values to determine the minimum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the minimum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the minimum value. + + The type of the elements in the source sequence. + A sequence of values to determine the minimum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the minimum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the minimum nullable value. + + The type of the elements in the source sequence. + A sequence of values to determine the minimum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the minimum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the minimum nullable value. + + The type of the elements in the source sequence. + A sequence of values to determine the minimum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the minimum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the minimum nullable value. + + The type of the elements in the source sequence. + A sequence of values to determine the minimum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the minimum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the minimum nullable value. + + The type of the elements in the source sequence. + A sequence of values to determine the minimum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the minimum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Invokes a transform function on each element of a sequence and returns the minimum nullable value. + + The type of the elements in the source sequence. + A sequence of values to determine the minimum value of. + A transform function to apply to each element. + An observable sequence containing a single element with the value of type that corresponds to the minimum value in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the elements in an observable sequence with the minimum key value. + + The type of the elements in the source sequence. + The type of the key computed for each element in the source sequence. + An observable sequence to get the minimum elements for. + Key selector function. + An observable sequence containing a list of zero or more elements that have a minimum key value. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the elements in an observable sequence with the minimum key value according to the specified comparer. + + The type of the elements in the source sequence. + The type of the key computed for each element in the source sequence. + An observable sequence to get the minimum elements for. + Key selector function. + Comparer used to compare key values. + An observable sequence containing a list of zero or more elements that have a minimum key value. + or or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Determines whether two sequences are equal by comparing the elements pairwise. + + The type of the elements in the source sequence. + First observable sequence to compare. + Second observable sequence to compare. + An observable sequence that contains a single element which indicates whether both sequences are of equal length and their corresponding elements are equal according to the default equality comparer for their type. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Determines whether two sequences are equal by comparing the elements pairwise using a specified equality comparer. + + The type of the elements in the source sequence. + First observable sequence to compare. + Second observable sequence to compare. + Comparer used to compare elements of both sequences. + An observable sequence that contains a single element which indicates whether both sequences are of equal length and their corresponding elements are equal according to the specified equality comparer. + or or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Determines whether an observable and enumerable sequence are equal by comparing the elements pairwise. + + The type of the elements in the source sequence. + First observable sequence to compare. + Second observable sequence to compare. + An observable sequence that contains a single element which indicates whether both sequences are of equal length and their corresponding elements are equal according to the default equality comparer for their type. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Determines whether an observable and enumerable sequence are equal by comparing the elements pairwise using a specified equality comparer. + + The type of the elements in the source sequence. + First observable sequence to compare. + Second observable sequence to compare. + Comparer used to compare elements of both sequences. + An observable sequence that contains a single element which indicates whether both sequences are of equal length and their corresponding elements are equal according to the specified equality comparer. + or or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Returns the only element of an observable sequence, and reports an exception if there is not exactly one element in the observable sequence. + + The type of the elements in the source sequence. + Source observable sequence. + Sequence containing the single element in the observable sequence. + is null. + (Asynchronous) The source sequence contains more than one element. -or- The source sequence is empty. + + + + Returns the only element of an observable sequence that satisfies the condition in the predicate, and reports an exception if there is not exactly one element in the observable sequence. + + The type of the elements in the source sequence. + Source observable sequence. + A predicate function to evaluate for elements in the source sequence. + Sequence containing the single element in the observable sequence that satisfies the condition in the predicate. + or is null. + (Asynchronous) No element satisfies the condition in the predicate. -or- More than one element satisfies the condition in the predicate. -or- The source sequence is empty. + + + + Returns the only element of an observable sequence, or a default value if the observable sequence is empty; this method reports an exception if there is more than one element in the observable sequence. + + The type of the elements in the source sequence. + Source observable sequence. + Sequence containing the single element in the observable sequence, or a default value if no such element exists. + is null. + (Asynchronous) The source sequence contains more than one element. + + + + Returns the only element of an observable sequence that matches the predicate, or a default value if no such element exists; this method reports an exception if there is more than one element in the observable sequence. + + The type of the elements in the source sequence. + Source observable sequence. + A predicate function to evaluate for elements in the source sequence. + Sequence containing the single element in the observable sequence that satisfies the condition in the predicate, or a default value if no such element exists. + or is null. + (Asynchronous) The sequence contains more than one element that satisfies the condition in the predicate. + + + + Computes the sum of a sequence of values. + + A sequence of values to calculate the sum of. + An observable sequence containing a single element with the sum of the values in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of values. + + A sequence of values to calculate the sum of. + An observable sequence containing a single element with the sum of the values in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of values. + + A sequence of values to calculate the sum of. + An observable sequence containing a single element with the sum of the values in the source sequence. + is null. + (Asynchronous) The sum of the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of values. + + A sequence of values to calculate the sum of. + An observable sequence containing a single element with the sum of the values in the source sequence. + is null. + (Asynchronous) The sum of the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of values. + + A sequence of values to calculate the sum of. + An observable sequence containing a single element with the sum of the values in the source sequence. + is null. + (Asynchronous) The sum of the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of nullable values. + + A sequence of nullable values to calculate the sum of. + An observable sequence containing a single element with the sum of the values in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of nullable values. + + A sequence of nullable values to calculate the sum of. + An observable sequence containing a single element with the sum of the values in the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of nullable values. + + A sequence of nullable values to calculate the sum of. + An observable sequence containing a single element with the sum of the values in the source sequence. + is null. + (Asynchronous) The sum of the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of nullable values. + + A sequence of nullable values to calculate the sum of. + An observable sequence containing a single element with the sum of the values in the source sequence. + is null. + (Asynchronous) The sum of the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of nullable values. + + A sequence of nullable values to calculate the sum of. + An observable sequence containing a single element with the sum of the values in the source sequence. + is null. + (Asynchronous) The sum of the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values that are used to calculate a sum. + A transform function to apply to each element. + An observable sequence containing a single element with the sum of the values in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values that are used to calculate a sum. + A transform function to apply to each element. + An observable sequence containing a single element with the sum of the values in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values that are used to calculate a sum. + A transform function to apply to each element. + An observable sequence containing a single element with the sum of the values in the source sequence. + or is null. + (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values that are used to calculate a sum. + A transform function to apply to each element. + An observable sequence containing a single element with the sum of the values in the source sequence. + or is null. + (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values that are used to calculate a sum. + A transform function to apply to each element. + An observable sequence containing a single element with the sum of the values in the source sequence. + or is null. + (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values that are used to calculate a sum. + A transform function to apply to each element. + An observable sequence containing a single element with the sum of the values in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values that are used to calculate a sum. + A transform function to apply to each element. + An observable sequence containing a single element with the sum of the values in the source sequence. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values that are used to calculate a sum. + A transform function to apply to each element. + An observable sequence containing a single element with the sum of the values in the source sequence. + or is null. + (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values that are used to calculate a sum. + A transform function to apply to each element. + An observable sequence containing a single element with the sum of the values in the source sequence. + or is null. + (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + + The type of the elements in the source sequence. + A sequence of values that are used to calculate a sum. + A transform function to apply to each element. + An observable sequence containing a single element with the sum of the values in the source sequence. + or is null. + (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Creates an array from an observable sequence. + + The type of the elements in the source sequence. + The source observable sequence to get an array of elements for. + An observable sequence containing a single element with an array containing all the elements of the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Creates a dictionary from an observable sequence according to a specified key selector function. + + The type of the elements in the source sequence. + The type of the dictionary key computed for each element in the source sequence. + An observable sequence to create a dictionary for. + A function to extract a key from each element. + An observable sequence containing a single element with a dictionary mapping unique key values onto the corresponding source sequence's element. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Creates a dictionary from an observable sequence according to a specified key selector function, and a comparer. + + The type of the elements in the source sequence. + The type of the dictionary key computed for each element in the source sequence. + An observable sequence to create a dictionary for. + A function to extract a key from each element. + An equality comparer to compare keys. + An observable sequence containing a single element with a dictionary mapping unique key values onto the corresponding source sequence's element. + or or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Creates a dictionary from an observable sequence according to a specified key selector function, and an element selector function. + + The type of the elements in the source sequence. + The type of the dictionary key computed for each element in the source sequence. + The type of the dictionary value computed for each element in the source sequence. + An observable sequence to create a dictionary for. + A function to extract a key from each element. + A transform function to produce a result element value from each element. + An observable sequence containing a single element with a dictionary mapping unique key values onto the corresponding source sequence's element. + or or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Creates a dictionary from an observable sequence according to a specified key selector function, a comparer, and an element selector function. + + The type of the elements in the source sequence. + The type of the dictionary key computed for each element in the source sequence. + The type of the dictionary value computed for each element in the source sequence. + An observable sequence to create a dictionary for. + A function to extract a key from each element. + A transform function to produce a result element value from each element. + An equality comparer to compare keys. + An observable sequence containing a single element with a dictionary mapping unique key values onto the corresponding source sequence's element. + or or or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Creates a list from an observable sequence. + + The type of the elements in the source sequence. + The source observable sequence to get a list of elements for. + An observable sequence containing a single element with a list containing all the elements of the source sequence. + is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Creates a lookup from an observable sequence according to a specified key selector function. + + The type of the elements in the source sequence. + The type of the lookup key computed for each element in the source sequence. + An observable sequence to create a lookup for. + A function to extract a key from each element. + An observable sequence containing a single element with a lookup mapping unique key values onto the corresponding source sequence's elements. + or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Creates a lookup from an observable sequence according to a specified key selector function, and a comparer. + + The type of the elements in the source sequence. + The type of the lookup key computed for each element in the source sequence. + An observable sequence to create a lookup for. + A function to extract a key from each element. + An equality comparer to compare keys. + An observable sequence containing a single element with a lookup mapping unique key values onto the corresponding source sequence's elements. + or or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Creates a lookup from an observable sequence according to a specified key selector function, and an element selector function. + + The type of the elements in the source sequence. + The type of the lookup key computed for each element in the source sequence. + The type of the lookup value computed for each element in the source sequence. + An observable sequence to create a lookup for. + A function to extract a key from each element. + A transform function to produce a result element value from each element. + An observable sequence containing a single element with a lookup mapping unique key values onto the corresponding source sequence's elements. + or or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Creates a lookup from an observable sequence according to a specified key selector function, a comparer, and an element selector function. + + The type of the elements in the source sequence. + The type of the lookup key computed for each element in the source sequence. + The type of the lookup value computed for each element in the source sequence. + An observable sequence to create a lookup for. + A function to extract a key from each element. + A transform function to produce a result element value from each element. + An equality comparer to compare keys. + An observable sequence containing a single element with a lookup mapping unique key values onto the corresponding source sequence's elements. + or or or is null. + The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. + + + + Gets an awaiter that returns the last value of the observable sequence or throws an exception if the sequence is empty. + This operation subscribes to the observable sequence, making it hot. + + The type of the elements in the source sequence. + Source sequence to await. + Object that can be awaited. + is null. + + + + Gets an awaiter that returns the last value of the observable sequence or throws an exception if the sequence is empty. + This operation subscribes and connects to the observable sequence, making it hot. + + The type of the elements in the source sequence. + Source sequence to await. + Object that can be awaited. + is null. + + + + Gets an awaiter that returns the last value of the observable sequence or throws an exception if the sequence is empty. + This operation subscribes to the observable sequence, making it hot. The supplied CancellationToken can be used to cancel the subscription. + + The type of the elements in the source sequence. + Source sequence to await. + Cancellation token. + Object that can be awaited. + is null. + + + + Gets an awaiter that returns the last value of the observable sequence or throws an exception if the sequence is empty. + This operation subscribes and connects to the observable sequence, making it hot. The supplied CancellationToken can be used to cancel the subscription and connection. + + The type of the elements in the source sequence. + Source sequence to await. + Cancellation token. + Object that can be awaited. + is null. + + + + Multicasts the source sequence notifications through the specified subject to the resulting connectable observable. Upon connection of the + connectable observable, the subject is subscribed to the source exactly one, and messages are forwarded to the observers registered with + the connectable observable. For specializations with fixed subject types, see Publish, PublishLast, and Replay. + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + Source sequence whose elements will be pushed into the specified subject. + Subject to push source elements into. + A connectable observable sequence that upon connection causes the source sequence to push results into the specified subject. + or is null. + + + + Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each + subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's + invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. + + The type of the elements in the source sequence. + The type of the elements produced by the intermediate subject. + The type of the elements in the result sequence. + Source sequence which will be multicasted in the specified selector function. + Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. + Selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. + An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. + or or is null. + + + + Returns a connectable observable sequence that shares a single subscription to the underlying sequence. + This operator is a specialization of Multicast using a regular . + + The type of the elements in the source sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + A connectable observable sequence that shares a single subscription to the underlying sequence. + is null. + Subscribers will receive all notifications of the source from the time of the subscription on. + + + + + Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. + This operator is a specialization of Multicast using a regular . + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. + An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. + or is null. + + + + + Returns a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Initial value received by observers upon subscription. + A connectable observable sequence that shares a single subscription to the underlying sequence. + is null. + Subscribers will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. + + + + + Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. + Initial value received by observers upon subscription. + An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. + or is null. + + + + + Returns a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + A connectable observable sequence that shares a single subscription to the underlying sequence. + is null. + Subscribers will only receive the last notification of the source. + + + + + Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. + An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. + or is null. + + + + + Returns an observable sequence that stays connected to the source as long as there is at least one subscription to the observable sequence. + + The type of the elements in the source sequence. + Connectable observable sequence. + An observable sequence that stays connected to the source as long as there is at least one subscription to the observable sequence. + is null. + + + + Returns a connectable observable sequence that shares a single subscription to the underlying sequence replaying all notifications. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + A connectable observable sequence that shares a single subscription to the underlying sequence. + is null. + Subscribers will receive all the notifications of the source. + + + + + Returns a connectable observable sequence that shares a single subscription to the underlying sequence replaying all notifications. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Scheduler where connected observers will be invoked on. + A connectable observable sequence that shares a single subscription to the underlying sequence. + or is null. + Subscribers will receive all the notifications of the source. + + + + + Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying all notifications. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source. + An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. + or is null. + + + + + Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying all notifications. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source. + Scheduler where connected observers within the selector function will be invoked on. + An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. + or or is null. + + + + + Returns a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Maximum time length of the replay buffer. + A connectable observable sequence that shares a single subscription to the underlying sequence. + is null. + is less than TimeSpan.Zero. + Subscribers will receive all the notifications of the source subject to the specified replay buffer trimming policy. + + + + + Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. + Maximum time length of the replay buffer. + An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. + or is null. + is less than TimeSpan.Zero. + + + + + Returns a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Maximum time length of the replay buffer. + Scheduler where connected observers will be invoked on. + A connectable observable sequence that shares a single subscription to the underlying sequence. + or is null. + is less than TimeSpan.Zero. + Subscribers will receive all the notifications of the source subject to the specified replay buffer trimming policy. + + + + + Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. + Maximum time length of the replay buffer. + Scheduler where connected observers within the selector function will be invoked on. + An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. + or or is null. + is less than TimeSpan.Zero. + + + + + Returns a connectable observable sequence that shares a single subscription to the underlying sequence replaying bufferSize notifications. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Maximum element count of the replay buffer. + Scheduler where connected observers will be invoked on. + A connectable observable sequence that shares a single subscription to the underlying sequence. + or is null. + is less than zero. + Subscribers will receive all the notifications of the source subject to the specified replay buffer trimming policy. + + + + + Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum element count for the replay buffer. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. + Maximum element count of the replay buffer. + Scheduler where connected observers within the selector function will be invoked on. + An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. + or or is null. + is less than zero. + + + + + Returns a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum element count for the replay buffer. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Maximum element count of the replay buffer. + A connectable observable sequence that shares a single subscription to the underlying sequence. + is null. + is less than zero. + Subscribers will receive all the notifications of the source subject to the specified replay buffer trimming policy. + + + + + Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum element count for the replay buffer. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. + Maximum element count of the replay buffer. + An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. + or is null. + is less than zero. + + + + + Returns a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length and element count for the replay buffer. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Maximum element count of the replay buffer. + Maximum time length of the replay buffer. + A connectable observable sequence that shares a single subscription to the underlying sequence. + is null. + is less than zero. + is less than TimeSpan.Zero. + Subscribers will receive all the notifications of the source subject to the specified replay buffer trimming policy. + + + + + Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length and element count for the replay buffer. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. + Maximum element count of the replay buffer. + Maximum time length of the replay buffer. + An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. + or is null. + is less than zero. + is less than TimeSpan.Zero. + + + + + Returns a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length and element count for the replay buffer. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Maximum element count of the replay buffer. + Maximum time length of the replay buffer. + Scheduler where connected observers will be invoked on. + A connectable observable sequence that shares a single subscription to the underlying sequence. + or is null. + is less than zero. + is less than TimeSpan.Zero. + Subscribers will receive all the notifications of the source subject to the specified replay buffer trimming policy. + + + + + Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length and element count for the replay buffer. + This operator is a specialization of Multicast using a . + + The type of the elements in the source sequence. + The type of the elements in the result sequence. + Source sequence whose elements will be multicasted through a single shared subscription. + Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. + Maximum element count of the replay buffer. + Maximum time length of the replay buffer. + Scheduler where connected observers within the selector function will be invoked on. + An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. + or or is null. + is less than zero. + is less than TimeSpan.Zero. + + + + + Produces an enumerable sequence of consecutive (possibly empty) chunks of the source sequence. + + The type of the elements in the source sequence. + Source observable sequence. + The enumerable sequence that returns consecutive (possibly empty) chunks upon each iteration. + is null. + + + + Produces an enumerable sequence that returns elements collected/aggregated from the source sequence between consecutive iterations. + + The type of the elements in the source sequence. + The type of the elements produced by the merge operation during collection. + Source observable sequence. + Factory to create a new collector object. + Merges a sequence element with the current collector. + The enumerable sequence that returns collected/aggregated elements from the source sequence upon each iteration. + or or is null. + + + + Produces an enumerable sequence that returns elements collected/aggregated from the source sequence between consecutive iterations. + + The type of the elements in the source sequence. + The type of the elements produced by the merge operation during collection. + Source observable sequence. + Factory to create the initial collector object. + Merges a sequence element with the current collector. + Factory to replace the current collector by a new collector. + The enumerable sequence that returns collected/aggregated elements from the source sequence upon each iteration. + or or or is null. + + + + Returns the first element of an observable sequence. + + The type of the elements in the source sequence. + Source observable sequence. + The first element in the observable sequence. + is null. + The source sequence is empty. + + + + + Returns the first element of an observable sequence that satisfies the condition in the predicate. + + The type of the elements in the source sequence. + Source observable sequence. + A predicate function to evaluate for elements in the source sequence. + The first element in the observable sequence that satisfies the condition in the predicate. + or is null. + No element satisfies the condition in the predicate. -or- The source sequence is empty. + + + + + Returns the first element of an observable sequence, or a default value if no such element exists. + + The type of the elements in the source sequence. + Source observable sequence. + The first element in the observable sequence, or a default value if no such element exists. + is null. + + + + + Returns the first element of an observable sequence that satisfies the condition in the predicate, or a default value if no such element exists. + + The type of the elements in the source sequence. + Source observable sequence. + A predicate function to evaluate for elements in the source sequence. + The first element in the observable sequence that satisfies the condition in the predicate, or a default value if no such element exists. + or is null. + + + + + Invokes an action for each element in the observable sequence, and blocks until the sequence is terminated. + + The type of the elements in the source sequence. + Source sequence. + Action to invoke for each element in the observable sequence. + or is null. + Because of its blocking nature, this operator is mainly used for testing. + + + + Invokes an action for each element in the observable sequence, incorporating the element's index, and blocks until the sequence is terminated. + + The type of the elements in the source sequence. + Source sequence. + Action to invoke for each element in the observable sequence. + or is null. + Because of its blocking nature, this operator is mainly used for testing. + + + + Returns an enumerator that enumerates all values of the observable sequence. + + The type of the elements in the source sequence. + An observable sequence to get an enumerator for. + The enumerator that can be used to enumerate over the elements in the observable sequence. + is null. + + + + Returns the last element of an observable sequence. + + The type of the elements in the source sequence. + Source observable sequence. + The last element in the observable sequence. + is null. + The source sequence is empty. + + + + + Returns the last element of an observable sequence that satisfies the condition in the predicate. + + The type of the elements in the source sequence. + Source observable sequence. + A predicate function to evaluate for elements in the source sequence. + The last element in the observable sequence that satisfies the condition in the predicate. + or is null. + No element satisfies the condition in the predicate. -or- The source sequence is empty. + + + + + Returns the last element of an observable sequence, or a default value if no such element exists. + + The type of the elements in the source sequence. + Source observable sequence. + The last element in the observable sequence, or a default value if no such element exists. + is null. + + + + + Returns the last element of an observable sequence that satisfies the condition in the predicate, or a default value if no such element exists. + + The type of the elements in the source sequence. + Source observable sequence. + A predicate function to evaluate for elements in the source sequence. + The last element in the observable sequence that satisfies the condition in the predicate, or a default value if no such element exists. + or is null. + + + + + Returns an enumerable sequence whose enumeration returns the latest observed element in the source observable sequence. + Enumerators on the resulting sequence will never produce the same element repeatedly, and will block until the next element becomes available. + + The type of the elements in the source sequence. + Source observable sequence. + The enumerable sequence that returns the last sampled element upon each iteration and subsequently blocks until the next element in the observable source sequence becomes available. + + + + Returns an enumerable sequence whose enumeration returns the most recently observed element in the source observable sequence, using the specified initial value in case no element has been sampled yet. + Enumerators on the resulting sequence never block and can produce the same element repeatedly. + + The type of the elements in the source sequence. + Source observable sequence. + Initial value that will be yielded by the enumerable sequence if no element has been sampled yet. + The enumerable sequence that returns the last sampled element upon each iteration. + is null. + + + + Returns an enumerable sequence whose enumeration blocks until the next element in the source observable sequence becomes available. + Enumerators on the resulting sequence will block until the next element becomes available. + + The type of the elements in the source sequence. + Source observable sequence. + The enumerable sequence that blocks upon each iteration until the next element in the observable source sequence becomes available. + is null. + + + + Returns the only element of an observable sequence, and throws an exception if there is not exactly one element in the observable sequence. + + The type of the elements in the source sequence. + Source observable sequence. + The single element in the observable sequence. + is null. + The source sequence contains more than one element. -or- The source sequence is empty. + + + + + Returns the only element of an observable sequence that satisfies the condition in the predicate, and throws an exception if there is not exactly one element matching the predicate in the observable sequence. + + The type of the elements in the source sequence. + Source observable sequence. + A predicate function to evaluate for elements in the source sequence. + The single element in the observable sequence that satisfies the condition in the predicate. + or is null. + No element satisfies the condition in the predicate. -or- More than one element satisfies the condition in the predicate. -or- The source sequence is empty. + + + + + Returns the only element of an observable sequence, or a default value if the observable sequence is empty; this method throws an exception if there is more than one element in the observable sequence. + + The type of the elements in the source sequence. + Source observable sequence. + The single element in the observable sequence, or a default value if no such element exists. + is null. + The source sequence contains more than one element. + + + + + Returns the only element of an observable sequence that satisfies the condition in the predicate, or a default value if no such element exists; this method throws an exception if there is more than one element matching the predicate in the observable sequence. + + The type of the elements in the source sequence. + Source observable sequence. + A predicate function to evaluate for elements in the source sequence. + The single element in the observable sequence that satisfies the condition in the predicate, or a default value if no such element exists. + or is null. + The sequence contains more than one element that satisfies the condition in the predicate. + + + + + Waits for the observable sequence to complete and returns the last element of the sequence. + If the sequence terminates with an OnError notification, the exception is throw. + + The type of the elements in the source sequence. + Source observable sequence. + The last element in the observable sequence. + is null. + The source sequence is empty. + + + + Wraps the source sequence in order to run its observer callbacks on the specified scheduler. + + The type of the elements in the source sequence. + Source sequence. + Scheduler to notify observers on. + The source sequence whose observations happen on the specified scheduler. + or is null. + + This only invokes observer callbacks on a scheduler. In case the subscription and/or unsubscription actions have side-effects + that require to be run on a scheduler, use . + + + + + Wraps the source sequence in order to run its observer callbacks on the specified synchronization context. + + The type of the elements in the source sequence. + Source sequence. + Synchronization context to notify observers on. + The source sequence whose observations happen on the specified synchronization context. + or is null. + + This only invokes observer callbacks on a synchronization context. In case the subscription and/or unsubscription actions have side-effects + that require to be run on a synchronization context, use . + + + + + Wraps the source sequence in order to run its subscription and unsubscription logic on the specified scheduler. This operation is not commonly used; + see the remarks section for more information on the distinction between SubscribeOn and ObserveOn. + + The type of the elements in the source sequence. + Source sequence. + Scheduler to perform subscription and unsubscription actions on. + The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. + or is null. + + This only performs the side-effects of subscription and unsubscription on the specified scheduler. In order to invoke observer + callbacks on a scheduler, use . + + + + + Wraps the source sequence in order to run its subscription and unsubscription logic on the specified synchronization context. This operation is not commonly used; + see the remarks section for more information on the distinction between SubscribeOn and ObserveOn. + + The type of the elements in the source sequence. + Source sequence. + Synchronization context to perform subscription and unsubscription actions on. + The source sequence whose subscriptions and unsubscriptions happen on the specified synchronization context. + or is null. + + This only performs the side-effects of subscription and unsubscription on the specified synchronization context. In order to invoke observer + callbacks on a synchronization context, use . + + + + + Synchronizes the observable sequence such that observer notifications cannot be delivered concurrently. + This overload is useful to "fix" an observable sequence that exhibits concurrent callbacks on individual observers, which is invalid behavior for the query processor. + + The type of the elements in the source sequence. + Source sequence. + The source sequence whose outgoing calls to observers are synchronized. + is null. + + It's invalid behavior - according to the observer grammar - for a sequence to exhibit concurrent callbacks on a given observer. + This operator can be used to "fix" a source that doesn't conform to this rule. + + + + + Synchronizes the observable sequence such that observer notifications cannot be delivered concurrently, using the specified gate object. + This overload is useful when writing n-ary query operators, in order to prevent concurrent callbacks from different sources by synchronizing on a common gate object. + + The type of the elements in the source sequence. + Source sequence. + Gate object to synchronize each observer call on. + The source sequence whose outgoing calls to observers are synchronized on the given gate object. + or is null. + + + + Subscribes an observer to an enumerable sequence. + + The type of the elements in the source sequence. + Enumerable sequence to subscribe to. + Observer that will receive notifications from the enumerable sequence. + Disposable object that can be used to unsubscribe the observer from the enumerable + or is null. + + + + Subscribes an observer to an enumerable sequence, using the specified scheduler to run the enumeration loop. + + The type of the elements in the source sequence. + Enumerable sequence to subscribe to. + Observer that will receive notifications from the enumerable sequence. + Scheduler to perform the enumeration on. + Disposable object that can be used to unsubscribe the observer from the enumerable + or or is null. + + + + Converts an observable sequence to an enumerable sequence. + + The type of the elements in the source sequence. + An observable sequence to convert to an enumerable sequence. + The enumerable sequence containing the elements in the observable sequence. + is null. + + + + Exposes an observable sequence as an object with an Action-based .NET event. + + Observable source sequence. + The event source object. + is null. + + + + Exposes an observable sequence as an object with an Action<TSource>-based .NET event. + + The type of the elements in the source sequence. + Observable source sequence. + The event source object. + is null. + + + + Exposes an observable sequence as an object with a .NET event, conforming to the standard .NET event pattern. + + The type of the event data generated by the event. + Observable source sequence. + The event source object. + is null. + + + + Converts an enumerable sequence to an observable sequence. + + The type of the elements in the source sequence. + Enumerable sequence to convert to an observable sequence. + The observable sequence whose elements are pulled from the given enumerable sequence. + is null. + + + + Converts an enumerable sequence to an observable sequence, using the specified scheduler to run the enumeration loop. + + The type of the elements in the source sequence. + Enumerable sequence to convert to an observable sequence. + Scheduler to run the enumeration of the input sequence on. + The observable sequence whose elements are pulled from the given enumerable sequence. + or is null. + + + + Creates an observable sequence from a specified Subscribe method implementation. + + The type of the elements in the produced sequence. + Implementation of the resulting observable sequence's Subscribe method. + The observable sequence with the specified implementation for the Subscribe method. + is null. + + Use of this operator is preferred over manual implementation of the IObservable<T> interface. In case + you need a type implementing IObservable<T> rather than an anonymous implementation, consider using + the abstract base class. + + + + + Creates an observable sequence from a specified Subscribe method implementation. + + The type of the elements in the produced sequence. + Implementation of the resulting observable sequence's Subscribe method, returning an Action delegate that will be wrapped in an IDisposable. + The observable sequence with the specified implementation for the Subscribe method. + is null. + + Use of this operator is preferred over manual implementation of the IObservable<T> interface. In case + you need a type implementing IObservable<T> rather than an anonymous implementation, consider using + the abstract base class. + + + + + Creates an observable sequence from a specified cancellable asynchronous Subscribe method. + The CancellationToken passed to the asynchronous Subscribe method is tied to the returned disposable subscription, allowing best-effort cancellation. + + The type of the elements in the produced sequence. + Asynchronous method used to produce elements. + The observable sequence surfacing the elements produced by the asynchronous method. + is null. + This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11. + When a subscription to the resulting sequence is disposed, the CancellationToken that was fed to the asynchronous subscribe function will be signaled. + + + + Creates an observable sequence from a specified asynchronous Subscribe method. + + The type of the elements in the produced sequence. + Asynchronous method used to produce elements. + The observable sequence surfacing the elements produced by the asynchronous method. + is null. + This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11. + + + + Creates an observable sequence from a specified cancellable asynchronous Subscribe method. + The CancellationToken passed to the asynchronous Subscribe method is tied to the returned disposable subscription, allowing best-effort cancellation. + + The type of the elements in the produced sequence. + Asynchronous method used to implemented the resulting sequence's Subscribe method. + The observable sequence with the specified implementation for the Subscribe method. + is null. + This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11. + When a subscription to the resulting sequence is disposed, the CancellationToken that was fed to the asynchronous subscribe function will be signaled. + + + + Creates an observable sequence from a specified asynchronous Subscribe method. + + The type of the elements in the produced sequence. + Asynchronous method used to implemented the resulting sequence's Subscribe method. + The observable sequence with the specified implementation for the Subscribe method. + is null. + This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11. + + + + Creates an observable sequence from a specified cancellable asynchronous Subscribe method. + The CancellationToken passed to the asynchronous Subscribe method is tied to the returned disposable subscription, allowing best-effort cancellation. + + The type of the elements in the produced sequence. + Asynchronous method used to implemented the resulting sequence's Subscribe method, returning an Action delegate that will be wrapped in an IDisposable. + The observable sequence with the specified implementation for the Subscribe method. + is null. + This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11. + When a subscription to the resulting sequence is disposed, the CancellationToken that was fed to the asynchronous subscribe function will be signaled. + + + + Creates an observable sequence from a specified asynchronous Subscribe method. + + The type of the elements in the produced sequence. + Asynchronous method used to implemented the resulting sequence's Subscribe method, returning an Action delegate that will be wrapped in an IDisposable. + The observable sequence with the specified implementation for the Subscribe method. + is null. + This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11. + + + + Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. + + The type of the elements in the sequence returned by the factory function, and in the resulting sequence. + Observable factory function to invoke for each observer that subscribes to the resulting sequence. + An observable sequence whose observers trigger an invocation of the given observable factory function. + is null. + + + + Returns an observable sequence that starts the specified asynchronous factory function whenever a new observer subscribes. + + The type of the elements in the sequence returned by the factory function, and in the resulting sequence. + Asynchronous factory function to start for each observer that subscribes to the resulting sequence. + An observable sequence whose observers trigger the given asynchronous observable factory function to be started. + is null. + This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11. + + + + Returns an observable sequence that starts the specified cancellable asynchronous factory function whenever a new observer subscribes. + The CancellationToken passed to the asynchronous factory function is tied to the returned disposable subscription, allowing best-effort cancellation. + + The type of the elements in the sequence returned by the factory function, and in the resulting sequence. + Asynchronous factory function to start for each observer that subscribes to the resulting sequence. + An observable sequence whose observers trigger the given asynchronous observable factory function to be started. + is null. + This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11. + When a subscription to the resulting sequence is disposed, the CancellationToken that was fed to the asynchronous observable factory function will be signaled. + + + + Returns an empty observable sequence. + + The type used for the IObservable<T> type parameter of the resulting sequence. + An observable sequence with no elements. + + + + Returns an empty observable sequence. + + The type used for the IObservable<T> type parameter of the resulting sequence. + Object solely used to infer the type of the type parameter. This parameter is typically used when creating a sequence of anonymously typed elements. + An observable sequence with no elements. + + + + Returns an empty observable sequence, using the specified scheduler to send out the single OnCompleted message. + + The type used for the IObservable<T> type parameter of the resulting sequence. + Scheduler to send the termination call on. + An observable sequence with no elements. + is null. + + + + Returns an empty observable sequence, using the specified scheduler to send out the single OnCompleted message. + + The type used for the IObservable<T> type parameter of the resulting sequence. + Scheduler to send the termination call on. + Object solely used to infer the type of the type parameter. This parameter is typically used when creating a sequence of anonymously typed elements. + An observable sequence with no elements. + is null. + + + + Generates an observable sequence by running a state-driven loop producing the sequence's elements. + + The type of the state used in the generator loop. + The type of the elements in the produced sequence. + Initial state. + Condition to terminate generation (upon returning false). + Iteration step function. + Selector function for results produced in the sequence. + The generated sequence. + or or is null. + + + + Generates an observable sequence by running a state-driven loop producing the sequence's elements, using the specified scheduler to send out observer messages. + + The type of the state used in the generator loop. + The type of the elements in the produced sequence. + Initial state. + Condition to terminate generation (upon returning false). + Iteration step function. + Selector function for results produced in the sequence. + Scheduler on which to run the generator loop. + The generated sequence. + or or or is null. + + + + Returns a non-terminating observable sequence, which can be used to denote an infinite duration (e.g. when using reactive joins). + + The type used for the IObservable<T> type parameter of the resulting sequence. + An observable sequence whose observers will never get called. + + + + Returns a non-terminating observable sequence, which can be used to denote an infinite duration (e.g. when using reactive joins). + + The type used for the IObservable<T> type parameter of the resulting sequence. + Object solely used to infer the type of the type parameter. This parameter is typically used when creating a sequence of anonymously typed elements. + An observable sequence whose observers will never get called. + + + + Generates an observable sequence of integral numbers within a specified range. + + The value of the first integer in the sequence. + The number of sequential integers to generate. + An observable sequence that contains a range of sequential integral numbers. + is less than zero. -or- + - 1 is larger than . + + + + Generates an observable sequence of integral numbers within a specified range, using the specified scheduler to send out observer messages. + + The value of the first integer in the sequence. + The number of sequential integers to generate. + Scheduler to run the generator loop on. + An observable sequence that contains a range of sequential integral numbers. + is less than zero. -or- + - 1 is larger than . + is null. + + + + Generates an observable sequence that repeats the given element infinitely. + + The type of the element that will be repeated in the produced sequence. + Element to repeat. + An observable sequence that repeats the given element infinitely. + + + + Generates an observable sequence that repeats the given element infinitely, using the specified scheduler to send out observer messages. + + The type of the element that will be repeated in the produced sequence. + Element to repeat. + Scheduler to run the producer loop on. + An observable sequence that repeats the given element infinitely. + is null. + + + + Generates an observable sequence that repeats the given element the specified number of times. + + The type of the element that will be repeated in the produced sequence. + Element to repeat. + Number of times to repeat the element. + An observable sequence that repeats the given element the specified number of times. + is less than zero. + + + + Generates an observable sequence that repeats the given element the specified number of times, using the specified scheduler to send out observer messages. + + The type of the element that will be repeated in the produced sequence. + Element to repeat. + Number of times to repeat the element. + Scheduler to run the producer loop on. + An observable sequence that repeats the given element the specified number of times. + is less than zero. + is null. + + + + Returns an observable sequence that contains a single element. + + The type of the element that will be returned in the produced sequence. + Single element in the resulting observable sequence. + An observable sequence containing the single specified element. + + + + Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. + + The type of the element that will be returned in the produced sequence. + Single element in the resulting observable sequence. + Scheduler to send the single element on. + An observable sequence containing the single specified element. + is null. + + + + Returns an observable sequence that terminates with an exception. + + The type used for the IObservable<T> type parameter of the resulting sequence. + Exception object used for the sequence's termination. + The observable sequence that terminates exceptionally with the specified exception object. + is null. + + + + Returns an observable sequence that terminates with an exception. + + The type used for the IObservable<T> type parameter of the resulting sequence. + Exception object used for the sequence's termination. + Object solely used to infer the type of the type parameter. This parameter is typically used when creating a sequence of anonymously typed elements. + The observable sequence that terminates exceptionally with the specified exception object. + is null. + + + + Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single OnError message. + + The type used for the IObservable<T> type parameter of the resulting sequence. + Exception object used for the sequence's termination. + Scheduler to send the exceptional termination call on. + The observable sequence that terminates exceptionally with the specified exception object. + or is null. + + + + Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single OnError message. + + The type used for the IObservable<T> type parameter of the resulting sequence. + Exception object used for the sequence's termination. + Scheduler to send the exceptional termination call on. + Object solely used to infer the type of the type parameter. This parameter is typically used when creating a sequence of anonymously typed elements. + The observable sequence that terminates exceptionally with the specified exception object. + or is null. + + + + Constructs an observable sequence that depends on a resource object, whose lifetime is tied to the resulting observable sequence's lifetime. + + The type of the elements in the produced sequence. + The type of the resource used during the generation of the resulting sequence. Needs to implement . + Factory function to obtain a resource object. + Factory function to obtain an observable sequence that depends on the obtained resource. + An observable sequence whose lifetime controls the lifetime of the dependent resource object. + or is null. + + + + Constructs an observable sequence that depends on a resource object, whose lifetime is tied to the resulting observable sequence's lifetime. The resource is obtained and used through asynchronous methods. + The CancellationToken passed to the asynchronous methods is tied to the returned disposable subscription, allowing best-effort cancellation at any stage of the resource acquisition or usage. + + The type of the elements in the produced sequence. + The type of the resource used during the generation of the resulting sequence. Needs to implement . + Asynchronous factory function to obtain a resource object. + Asynchronous factory function to obtain an observable sequence that depends on the obtained resource. + An observable sequence whose lifetime controls the lifetime of the dependent resource object. + or is null. + This operator is especially useful in conjunction with the asynchronous programming features introduced in C# 5.0 and Visual Basic 11. + When a subscription to the resulting sequence is disposed, the CancellationToken that was fed to the asynchronous resource factory and observable factory functions will be signaled. + + + + Creates a pattern that matches when both observable sequences have an available element. + + The type of the elements in the left sequence. + The type of the elements in the right sequence. + Observable sequence to match with the right sequence. + Observable sequence to match with the left sequence. + Pattern object that matches when both observable sequences have an available element. + or is null. + + + + Matches when the observable sequence has an available element and projects the element by invoking the selector function. + + The type of the elements in the source sequence. + The type of the elements in the result sequence, returned by the selector function. + Observable sequence to apply the selector on. + Selector that will be invoked for elements in the source sequence. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + or is null. + + + + Joins together the results from several patterns. + + The type of the elements in the result sequence, obtained from the specified patterns. + A series of plans created by use of the Then operator on patterns. + An observable sequence with the results from matching several patterns. + is null. + + + + Joins together the results from several patterns. + + The type of the elements in the result sequence, obtained from the specified patterns. + A series of plans created by use of the Then operator on patterns. + An observable sequence with the results form matching several patterns. + is null. + + + + Propagates the observable sequence that reacts first. + + The type of the elements in the source sequences. + First observable sequence. + Second observable sequence. + An observable sequence that surfaces either of the given sequences, whichever reacted first. + or is null. + + + + Propagates the observable sequence that reacts first. + + The type of the elements in the source sequences. + Observable sources competing to react first. + An observable sequence that surfaces any of the given sequences, whichever reacted first. + is null. + + + + Propagates the observable sequence that reacts first. + + The type of the elements in the source sequences. + Observable sources competing to react first. + An observable sequence that surfaces any of the given sequences, whichever reacted first. + is null. + + + + Projects each element of an observable sequence into consecutive non-overlapping buffers. + + The type of the elements in the source sequence, and in the lists in the result sequence. + The type of the elements in the sequences indicating buffer closing events. + Source sequence to produce buffers over. + A function invoked to define the boundaries of the produced buffers. A new buffer is started when the previous one is closed. + An observable sequence of buffers. + or is null. + + + + Projects each element of an observable sequence into zero or more buffers. + + The type of the elements in the source sequence, and in the lists in the result sequence. + The type of the elements in the sequence indicating buffer opening events, also passed to the closing selector to obtain a sequence of buffer closing events. + The type of the elements in the sequences indicating buffer closing events. + Source sequence to produce buffers over. + Observable sequence whose elements denote the creation of new buffers. + A function invoked to define the closing of each produced buffer. + An observable sequence of buffers. + or or is null. + + + + Projects each element of an observable sequence into consecutive non-overlapping buffers. + + The type of the elements in the source sequence, and in the lists in the result sequence. + The type of the elements in the sequences indicating buffer boundary events. + Source sequence to produce buffers over. + Sequence of buffer boundary markers. The current buffer is closed and a new buffer is opened upon receiving a boundary marker. + An observable sequence of buffers. + or is null. + + + + Continues an observable sequence that is terminated by an exception of the specified type with the observable sequence produced by the handler. + + The type of the elements in the source sequence and sequences returned by the exception handler function. + The type of the exception to catch and handle. Needs to derive from . + Source sequence. + Exception handler function, producing another observable sequence. + An observable sequence containing the source sequence's elements, followed by the elements produced by the handler's resulting observable sequence in case an exception occurred. + or is null. + + + + Continues an observable sequence that is terminated by an exception with the next observable sequence. + + The type of the elements in the source sequence and handler sequence. + First observable sequence whose exception (if any) is caught. + Second observable sequence used to produce results when an error occurred in the first sequence. + An observable sequence containing the first sequence's elements, followed by the elements of the second sequence in case an exception occurred. + or is null. + + + + Continues an observable sequence that is terminated by an exception with the next observable sequence. + + The type of the elements in the source and handler sequences. + Observable sequences to catch exceptions for. + An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. + is null. + + + + Continues an observable sequence that is terminated by an exception with the next observable sequence. + + The type of the elements in the source and handler sequences. + Observable sequences to catch exceptions for. + An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. + is null. + + + + Merges two observable sequences into one observable sequence by using the selector function whenever one of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Function to invoke whenever either of the sources produces an element. + An observable sequence containing the result of combining elements of both sources using the specified result selector function. + or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Function to invoke whenever any of the sources produces an element. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Function to invoke whenever any of the sources produces an element. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Function to invoke whenever any of the sources produces an element. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Function to invoke whenever any of the sources produces an element. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Function to invoke whenever any of the sources produces an element. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Function to invoke whenever any of the sources produces an element. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Function to invoke whenever any of the sources produces an element. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Tenth observable source. + Function to invoke whenever any of the sources produces an element. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Tenth observable source. + Eleventh observable source. + Function to invoke whenever any of the sources produces an element. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Tenth observable source. + Eleventh observable source. + Twelfth observable source. + Function to invoke whenever any of the sources produces an element. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + The type of the elements in the thirteenth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Tenth observable source. + Eleventh observable source. + Twelfth observable source. + Thirteenth observable source. + Function to invoke whenever any of the sources produces an element. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + The type of the elements in the thirteenth source sequence. + The type of the elements in the fourteenth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Tenth observable source. + Eleventh observable source. + Twelfth observable source. + Thirteenth observable source. + Fourteenth observable source. + Function to invoke whenever any of the sources produces an element. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + The type of the elements in the thirteenth source sequence. + The type of the elements in the fourteenth source sequence. + The type of the elements in the fifteenth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Tenth observable source. + Eleventh observable source. + Twelfth observable source. + Thirteenth observable source. + Fourteenth observable source. + Fifteenth observable source. + Function to invoke whenever any of the sources produces an element. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + The type of the elements in the thirteenth source sequence. + The type of the elements in the fourteenth source sequence. + The type of the elements in the fifteenth source sequence. + The type of the elements in the sixteenth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Tenth observable source. + Eleventh observable source. + Twelfth observable source. + Thirteenth observable source. + Fourteenth observable source. + Fifteenth observable source. + Sixteenth observable source. + Function to invoke whenever any of the sources produces an element. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. + + The type of the elements in the source sequences. + The type of the elements in the result sequence, returned by the selector function. + Observable sources. + Function to invoke whenever any of the sources produces an element. For efficiency, the input list is reused after the selector returns. Either aggregate or copy the values during the function call. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or is null. + + + + Merges the specified observable sequences into one observable sequence by emitting a list with the latest source elements whenever any of the observable sequences produces an element. + + The type of the elements in the source sequences, and in the lists in the result sequence. + Observable sources. + An observable sequence containing lists of the latest elements of the sources. + is null. + + + + Merges the specified observable sequences into one observable sequence by emitting a list with the latest source elements whenever any of the observable sequences produces an element. + + The type of the elements in the source sequences, and in the lists in the result sequence. + Observable sources. + An observable sequence containing lists of the latest elements of the sources. + is null. + + + + Concatenates the second observable sequence to the first observable sequence upon successful termination of the first. + + The type of the elements in the source sequences. + First observable sequence. + Second observable sequence. + An observable sequence that contains the elements of the first sequence, followed by those of the second the sequence. + or is null. + + + + Concatenates all of the specified observable sequences, as long as the previous observable sequence terminated successfully. + + The type of the elements in the source sequences. + Observable sequences to concatenate. + An observable sequence that contains the elements of each given sequence, in sequential order. + is null. + + + + Concatenates all observable sequences in the given enumerable sequence, as long as the previous observable sequence terminated successfully. + + The type of the elements in the source sequences. + Observable sequences to concatenate. + An observable sequence that contains the elements of each given sequence, in sequential order. + is null. + + + + Concatenates all inner observable sequences, as long as the previous observable sequence terminated successfully. + + The type of the elements in the source sequences. + Observable sequence of inner observable sequences. + An observable sequence that contains the elements of each observed inner sequence, in sequential order. + is null. + + + + Concatenates all task results, as long as the previous task terminated successfully. + + The type of the results produced by the tasks. + Observable sequence of tasks. + An observable sequence that contains the results of each task, in sequential order. + is null. + If the tasks support cancellation, consider manual conversion of the tasks using , followed by a concatenation operation using . + + + + Merges elements from all inner observable sequences into a single observable sequence. + + The type of the elements in the source sequences. + Observable sequence of inner observable sequences. + The observable sequence that merges the elements of the inner sequences. + is null. + + + + Merges results from all source tasks into a single observable sequence. + + The type of the results produced by the source tasks. + Observable sequence of tasks. + The observable sequence that merges the results of the source tasks. + is null. + If the tasks support cancellation, consider manual conversion of the tasks using , followed by a merge operation using . + + + + Merges elements from all inner observable sequences into a single observable sequence, limiting the number of concurrent subscriptions to inner sequences. + + The type of the elements in the source sequences. + Observable sequence of inner observable sequences. + Maximum number of inner observable sequences being subscribed to concurrently. + The observable sequence that merges the elements of the inner sequences. + is null. + is less than or equal to zero. + + + + Merges elements from all observable sequences in the given enumerable sequence into a single observable sequence, limiting the number of concurrent subscriptions to inner sequences. + + The type of the elements in the source sequences. + Enumerable sequence of observable sequences. + Maximum number of observable sequences being subscribed to concurrently. + The observable sequence that merges the elements of the observable sequences. + is null. + is less than or equal to zero. + + + + Merges elements from all observable sequences in the given enumerable sequence into a single observable sequence, limiting the number of concurrent subscriptions to inner sequences, and using the specified scheduler for enumeration of and subscription to the sources. + + The type of the elements in the source sequences. + Enumerable sequence of observable sequences. + Maximum number of observable sequences being subscribed to concurrently. + Scheduler to run the enumeration of the sequence of sources on. + The observable sequence that merges the elements of the observable sequences. + or is null. + is less than or equal to zero. + + + + Merges elements from two observable sequences into a single observable sequence. + + The type of the elements in the source sequences. + First observable sequence. + Second observable sequence. + The observable sequence that merges the elements of the given sequences. + or is null. + + + + Merges elements from two observable sequences into a single observable sequence, using the specified scheduler for enumeration of and subscription to the sources. + + The type of the elements in the source sequences. + First observable sequence. + Second observable sequence. + Scheduler used to introduce concurrency for making subscriptions to the given sequences. + The observable sequence that merges the elements of the given sequences. + or or is null. + + + + Merges elements from all of the specified observable sequences into a single observable sequence. + + The type of the elements in the source sequences. + Observable sequences. + The observable sequence that merges the elements of the observable sequences. + is null. + + + + Merges elements from all of the specified observable sequences into a single observable sequence, using the specified scheduler for enumeration of and subscription to the sources. + + The type of the elements in the source sequences. + Observable sequences. + Scheduler to run the enumeration of the sequence of sources on. + The observable sequence that merges the elements of the observable sequences. + or is null. + + + + Merges elements from all observable sequences in the given enumerable sequence into a single observable sequence. + + The type of the elements in the source sequences. + Enumerable sequence of observable sequences. + The observable sequence that merges the elements of the observable sequences. + is null. + + + + Merges elements from all observable sequences in the given enumerable sequence into a single observable sequence, using the specified scheduler for enumeration of and subscription to the sources. + + The type of the elements in the source sequences. + Enumerable sequence of observable sequences. + Scheduler to run the enumeration of the sequence of sources on. + The observable sequence that merges the elements of the observable sequences. + or is null. + + + + Concatenates the second observable sequence to the first observable sequence upon successful or exceptional termination of the first. + + The type of the elements in the source sequences. + First observable sequence whose exception (if any) is caught. + Second observable sequence used to produce results after the first sequence terminates. + An observable sequence that concatenates the first and second sequence, even if the first sequence terminates exceptionally. + or is null. + + + + Concatenates all of the specified observable sequences, even if the previous observable sequence terminated exceptionally. + + The type of the elements in the source sequences. + Observable sequences to concatenate. + An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. + is null. + + + + Concatenates all observable sequences in the given enumerable sequence, even if the previous observable sequence terminated exceptionally. + + The type of the elements in the source sequences. + Observable sequences to concatenate. + An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. + is null. + + + + Returns the elements from the source observable sequence only after the other observable sequence produces an element. + + The type of the elements in the source sequence. + The type of the elements in the other sequence that indicates the end of skip behavior. + Source sequence to propagate elements for. + Observable sequence that triggers propagation of elements of the source sequence. + An observable sequence containing the elements of the source sequence starting from the point the other sequence triggered propagation. + or is null. + + + + Transforms an observable sequence of observable sequences into an observable sequence + producing values only from the most recent observable sequence. + Each time a new inner observable sequence is received, unsubscribe from the + previous inner observable sequence. + + The type of the elements in the source sequences. + Observable sequence of inner observable sequences. + The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. + is null. + + + + Transforms an observable sequence of tasks into an observable sequence + producing values only from the most recent observable sequence. + Each time a new task is received, the previous task's result is ignored. + + The type of the results produced by the source tasks. + Observable sequence of tasks. + The observable sequence that at any point in time produces the result of the most recent task that has been received. + is null. + If the tasks support cancellation, consider manual conversion of the tasks using , followed by a switch operation using . + + + + Returns the elements from the source observable sequence until the other observable sequence produces an element. + + The type of the elements in the source sequence. + The type of the elements in the other sequence that indicates the end of take behavior. + Source sequence to propagate elements for. + Observable sequence that terminates propagation of elements of the source sequence. + An observable sequence containing the elements of the source sequence up to the point the other sequence interrupted further propagation. + or is null. + + + + Projects each element of an observable sequence into consecutive non-overlapping windows. + + The type of the elements in the source sequence, and in the windows in the result sequence. + The type of the elements in the sequences indicating window closing events. + Source sequence to produce windows over. + A function invoked to define the boundaries of the produced windows. A new window is started when the previous one is closed. + An observable sequence of windows. + or is null. + + + + Projects each element of an observable sequence into zero or more windows. + + The type of the elements in the source sequence, and in the windows in the result sequence. + The type of the elements in the sequence indicating window opening events, also passed to the closing selector to obtain a sequence of window closing events. + The type of the elements in the sequences indicating window closing events. + Source sequence to produce windows over. + Observable sequence whose elements denote the creation of new windows. + A function invoked to define the closing of each produced window. + An observable sequence of windows. + or or is null. + + + + Projects each element of an observable sequence into consecutive non-overlapping windows. + + The type of the elements in the source sequence, and in the windows in the result sequence. + The type of the elements in the sequences indicating window boundary events. + Source sequence to produce windows over. + Sequence of window boundary markers. The current window is closed and a new window is opened upon receiving a boundary marker. + An observable sequence of windows. + or is null. + + + + Merges two observable sequences into one observable sequence by combining their elements in a pairwise fashion. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Function to invoke for each consecutive pair of elements from the first and second source. + An observable sequence containing the result of pairwise combining the elements of the first and second source using the specified result selector function. + or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Tenth observable source. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Tenth observable source. + Eleventh observable source. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Tenth observable source. + Eleventh observable source. + Twelfth observable source. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + The type of the elements in the thirteenth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Tenth observable source. + Eleventh observable source. + Twelfth observable source. + Thirteenth observable source. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + The type of the elements in the thirteenth source sequence. + The type of the elements in the fourteenth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Tenth observable source. + Eleventh observable source. + Twelfth observable source. + Thirteenth observable source. + Fourteenth observable source. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + The type of the elements in the thirteenth source sequence. + The type of the elements in the fourteenth source sequence. + The type of the elements in the fifteenth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Tenth observable source. + Eleventh observable source. + Twelfth observable source. + Thirteenth observable source. + Fourteenth observable source. + Fifteenth observable source. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + The type of the elements in the thirteenth source sequence. + The type of the elements in the fourteenth source sequence. + The type of the elements in the fifteenth source sequence. + The type of the elements in the sixteenth source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second observable source. + Third observable source. + Fourth observable source. + Fifth observable source. + Sixth observable source. + Seventh observable source. + Eighth observable source. + Ninth observable source. + Tenth observable source. + Eleventh observable source. + Twelfth observable source. + Thirteenth observable source. + Fourteenth observable source. + Fifteenth observable source. + Sixteenth observable source. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or or or or or or or or or or or or or or or or is null. + + + + Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. + + The type of the elements in the source sequences. + The type of the elements in the result sequence, returned by the selector function. + Observable sources. + Function to invoke for each series of elements at corresponding indexes in the sources. + An observable sequence containing the result of combining elements of the sources using the specified result selector function. + or is null. + + + + Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. + + The type of the elements in the source sequences, and in the lists in the result sequence. + Observable sources. + An observable sequence containing lists of elements at corresponding indexes. + is null. + + + + Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. + + The type of the elements in the source sequences, and in the lists in the result sequence. + Observable sources. + An observable sequence containing lists of elements at corresponding indexes. + is null. + + + + Merges an observable sequence and an enumerable sequence into one observable sequence by using the selector function. + + The type of the elements in the first observable source sequence. + The type of the elements in the second enumerable source sequence. + The type of the elements in the result sequence, returned by the selector function. + First observable source. + Second enumerable source. + Function to invoke for each consecutive pair of elements from the first and second source. + An observable sequence containing the result of pairwise combining the elements of the first and second source using the specified result selector function. + or or is null. + + + + Hides the identity of an observable sequence. + + The type of the elements in the source sequence. + An observable sequence whose identity to hide. + An observable sequence that hides the identity of the source sequence. + is null. + + + + Projects each element of an observable sequence into consecutive non-overlapping buffers which are produced based on element count information. + + The type of the elements in the source sequence, and in the lists in the result sequence. + Source sequence to produce buffers over. + Length of each buffer. + An observable sequence of buffers. + is null. + is less than or equal to zero. + + + + Projects each element of an observable sequence into zero or more buffers which are produced based on element count information. + + The type of the elements in the source sequence, and in the lists in the result sequence. + Source sequence to produce buffers over. + Length of each buffer. + Number of elements to skip between creation of consecutive buffers. + An observable sequence of buffers. + is null. + or is less than or equal to zero. + + + + Dematerializes the explicit notification values of an observable sequence as implicit notifications. + + The type of the elements materialized in the source sequence notification objects. + An observable sequence containing explicit notification values which have to be turned into implicit notifications. + An observable sequence exhibiting the behavior corresponding to the source sequence's notification values. + is null. + + + + Returns an observable sequence that contains only distinct contiguous elements. + + The type of the elements in the source sequence. + An observable sequence to retain distinct contiguous elements for. + An observable sequence only containing the distinct contiguous elements from the source sequence. + is null. + + + + Returns an observable sequence that contains only distinct contiguous elements according to the comparer. + + The type of the elements in the source sequence. + An observable sequence to retain distinct contiguous elements for. + Equality comparer for source elements. + An observable sequence only containing the distinct contiguous elements from the source sequence. + or is null. + + + + Returns an observable sequence that contains only distinct contiguous elements according to the keySelector. + + The type of the elements in the source sequence. + The type of the discriminator key computed for each element in the source sequence. + An observable sequence to retain distinct contiguous elements for, based on a computed key value. + A function to compute the comparison key for each element. + An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence. + or is null. + + + + Returns an observable sequence that contains only distinct contiguous elements according to the keySelector and the comparer. + + The type of the elements in the source sequence. + The type of the discriminator key computed for each element in the source sequence. + An observable sequence to retain distinct contiguous elements for, based on a computed key value. + A function to compute the comparison key for each element. + Equality comparer for computed key values. + An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence. + or or is null. + + + + Invokes an action for each element in the observable sequence, and propagates all observer messages through the result sequence. + This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. + + The type of the elements in the source sequence. + Source sequence. + Action to invoke for each element in the observable sequence. + The source sequence with the side-effecting behavior applied. + or is null. + + + + Invokes an action for each element in the observable sequence and invokes an action upon graceful termination of the observable sequence. + This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. + + The type of the elements in the source sequence. + Source sequence. + Action to invoke for each element in the observable sequence. + Action to invoke upon graceful termination of the observable sequence. + The source sequence with the side-effecting behavior applied. + or or is null. + + + + Invokes an action for each element in the observable sequence and invokes an action upon exceptional termination of the observable sequence. + This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. + + The type of the elements in the source sequence. + Source sequence. + Action to invoke for each element in the observable sequence. + Action to invoke upon exceptional termination of the observable sequence. + The source sequence with the side-effecting behavior applied. + or or is null. + + + + Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. + This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. + + The type of the elements in the source sequence. + Source sequence. + Action to invoke for each element in the observable sequence. + Action to invoke upon exceptional termination of the observable sequence. + Action to invoke upon graceful termination of the observable sequence. + The source sequence with the side-effecting behavior applied. + or or or is null. + + + + Invokes the observer's methods for each message in the source sequence. + This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. + + The type of the elements in the source sequence. + Source sequence. + Observer whose methods to invoke as part of the source sequence's observation. + The source sequence with the side-effecting behavior applied. + or is null. + + + + Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. + + The type of the elements in the source sequence. + Source sequence. + Action to invoke after the source observable sequence terminates. + Source sequence with the action-invoking termination behavior applied. + or is null. + + + + Ignores all elements in an observable sequence leaving only the termination messages. + + The type of the elements in the source sequence. + Source sequence. + An empty observable sequence that signals termination, successful or exceptional, of the source sequence. + is null. + + + + Materializes the implicit notifications of an observable sequence as explicit notification values. + + The type of the elements in the source sequence. + An observable sequence to get notification values for. + An observable sequence containing the materialized notification values from the source sequence. + is null. + + + + Repeats the observable sequence indefinitely. + + The type of the elements in the source sequence. + Observable sequence to repeat. + The observable sequence producing the elements of the given sequence repeatedly and sequentially. + is null. + + + + Repeats the observable sequence a specified number of times. + + The type of the elements in the source sequence. + Observable sequence to repeat. + Number of times to repeat the sequence. + The observable sequence producing the elements of the given sequence repeatedly. + is null. + is less than zero. + + + + Repeats the source observable sequence until it successfully terminates. + + The type of the elements in the source sequence. + Observable sequence to repeat until it successfully terminates. + An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. + is null. + + + + Repeats the source observable sequence the specified number of times or until it successfully terminates. + + The type of the elements in the source sequence. + Observable sequence to repeat until it successfully terminates. + Number of times to repeat the sequence. + An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. + is null. + is less than zero. + + + + Applies an accumulator function over an observable sequence and returns each intermediate result. The specified seed value is used as the initial accumulator value. + For aggregation behavior with no intermediate results, see . + + The type of the elements in the source sequence. + The type of the result of the aggregation. + An observable sequence to accumulate over. + The initial accumulator value. + An accumulator function to be invoked on each element. + An observable sequence containing the accumulated values. + or is null. + + + + Applies an accumulator function over an observable sequence and returns each intermediate result. + For aggregation behavior with no intermediate results, see . + + The type of the elements in the source sequence and the result of the aggregation. + An observable sequence to accumulate over. + An accumulator function to be invoked on each element. + An observable sequence containing the accumulated values. + or is null. + + + + Bypasses a specified number of elements at the end of an observable sequence. + + The type of the elements in the source sequence. + Source sequence. + Number of elements to bypass at the end of the source sequence. + An observable sequence containing the source sequence elements except for the bypassed ones at the end. + is null. + is less than zero. + + This operator accumulates a queue with a length enough to store the first elements. As more elements are + received, elements are taken from the front of the queue and produced on the result sequence. This causes elements to be delayed. + + + + + Prepends a sequence of values to an observable sequence. + + The type of the elements in the source sequence. + Source sequence to prepend values to. + Values to prepend to the specified sequence. + The source sequence prepended with the specified values. + or is null. + + + + Prepends a sequence of values to an observable sequence. + + The type of the elements in the source sequence. + Source sequence to prepend values to. + Values to prepend to the specified sequence. + The source sequence prepended with the specified values. + or is null. + + + + Prepends a sequence of values to an observable sequence. + + The type of the elements in the source sequence. + Source sequence to prepend values to. + Scheduler to emit the prepended values on. + Values to prepend to the specified sequence. + The source sequence prepended with the specified values. + or or is null. + + + + Prepends a sequence of values to an observable sequence. + + The type of the elements in the source sequence. + Source sequence to prepend values to. + Scheduler to emit the prepended values on. + Values to prepend to the specified sequence. + The source sequence prepended with the specified values. + or or is null. + + + + Returns a specified number of contiguous elements from the end of an observable sequence. + + The type of the elements in the source sequence. + Source sequence. + Number of elements to take from the end of the source sequence. + An observable sequence containing the specified number of elements from the end of the source sequence. + is null. + is less than zero. + + This operator accumulates a buffer with a length enough to store elements elements. Upon completion of + the source sequence, this buffer is drained on the result sequence. This causes the elements to be delayed. + + + + + Returns a specified number of contiguous elements from the end of an observable sequence, using the specified scheduler to drain the queue. + + The type of the elements in the source sequence. + Source sequence. + Number of elements to take from the end of the source sequence. + Scheduler used to drain the queue upon completion of the source sequence. + An observable sequence containing the specified number of elements from the end of the source sequence. + or is null. + is less than zero. + + This operator accumulates a buffer with a length enough to store elements elements. Upon completion of + the source sequence, this buffer is drained on the result sequence. This causes the elements to be delayed. + + + + + Returns a list with the specified number of contiguous elements from the end of an observable sequence. + + The type of the elements in the source sequence. + Source sequence. + Number of elements to take from the end of the source sequence. + An observable sequence containing a single list with the specified number of elements from the end of the source sequence. + is null. + is less than zero. + + This operator accumulates a buffer with a length enough to store elements. Upon completion of the + source sequence, this buffer is produced on the result sequence. + + + + + Projects each element of an observable sequence into consecutive non-overlapping windows which are produced based on element count information. + + The type of the elements in the source sequence, and in the windows in the result sequence. + Source sequence to produce windows over. + Length of each window. + An observable sequence of windows. + is null. + is less than or equal to zero. + + + + Projects each element of an observable sequence into zero or more windows which are produced based on element count information. + + The type of the elements in the source sequence, and in the windows in the result sequence. + Source sequence to produce windows over. + Length of each window. + Number of elements to skip between creation of consecutive windows. + An observable sequence of windows. + is null. + or is less than or equal to zero. + + + + Converts the elements of an observable sequence to the specified type. + + The type to convert the elements in the source sequence to. + The observable sequence that contains the elements to be converted. + An observable sequence that contains each element of the source sequence converted to the specified type. + is null. + + + + Returns the elements of the specified sequence or the type parameter's default value in a singleton sequence if the sequence is empty. + + The type of the elements in the source sequence (if any), whose default value will be taken if the sequence is empty. + The sequence to return a default value for if it is empty. + An observable sequence that contains the default value for the TSource type if the source is empty; otherwise, the elements of the source itself. + is null. + + + + Returns the elements of the specified sequence or the specified value in a singleton sequence if the sequence is empty. + + The type of the elements in the source sequence (if any), and the specified default value which will be taken if the sequence is empty. + The sequence to return the specified value for if it is empty. + The value to return if the sequence is empty. + An observable sequence that contains the specified default value if the source is empty; otherwise, the elements of the source itself. + is null. + + + + Returns an observable sequence that contains only distinct elements. + + The type of the elements in the source sequence. + An observable sequence to retain distinct elements for. + An observable sequence only containing the distinct elements from the source sequence. + is null. + Usage of this operator should be considered carefully due to the maintenance of an internal lookup structure which can grow large. + + + + Returns an observable sequence that contains only distinct elements according to the comparer. + + The type of the elements in the source sequence. + An observable sequence to retain distinct elements for. + Equality comparer for source elements. + An observable sequence only containing the distinct elements from the source sequence. + or is null. + Usage of this operator should be considered carefully due to the maintenance of an internal lookup structure which can grow large. + + + + Returns an observable sequence that contains only distinct elements according to the keySelector. + + The type of the elements in the source sequence. + The type of the discriminator key computed for each element in the source sequence. + An observable sequence to retain distinct elements for. + A function to compute the comparison key for each element. + An observable sequence only containing the distinct elements, based on a computed key value, from the source sequence. + or is null. + Usage of this operator should be considered carefully due to the maintenance of an internal lookup structure which can grow large. + + + + Returns an observable sequence that contains only distinct elements according to the keySelector and the comparer. + + The type of the elements in the source sequence. + The type of the discriminator key computed for each element in the source sequence. + An observable sequence to retain distinct elements for. + A function to compute the comparison key for each element. + Equality comparer for source elements. + An observable sequence only containing the distinct elements, based on a computed key value, from the source sequence. + or or is null. + Usage of this operator should be considered carefully due to the maintenance of an internal lookup structure which can grow large. + + + + Groups the elements of an observable sequence according to a specified key selector function. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + An observable sequence whose elements to group. + A function to extract the key for each element. + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + or is null. + + + + Groups the elements of an observable sequence according to a specified key selector function and comparer. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + An observable sequence whose elements to group. + A function to extract the key for each element. + An equality comparer to compare keys with. + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + or or is null. + + + + Groups the elements of an observable sequence and selects the resulting elements by using a specified function. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + The type of the elements within the groups computed for each element in the source sequence. + An observable sequence whose elements to group. + A function to extract the key for each element. + A function to map each source element to an element in an observable group. + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + or or is null. + + + + Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + The type of the elements within the groups computed for each element in the source sequence. + An observable sequence whose elements to group. + A function to extract the key for each element. + A function to map each source element to an element in an observable group. + An equality comparer to compare keys with. + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + or or or is null. + + + + Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + An observable sequence whose elements to group. + A function to extract the key for each element. + The initial number of elements that the underlying dictionary can contain. + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + or is null. + is less than 0. + + + + Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + An observable sequence whose elements to group. + A function to extract the key for each element. + The initial number of elements that the underlying dictionary can contain. + An equality comparer to compare keys with. + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + or or is null. + is less than 0. + + + + Groups the elements of an observable sequence with the specified initial capacity and selects the resulting elements by using a specified function. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + The type of the elements within the groups computed for each element in the source sequence. + An observable sequence whose elements to group. + A function to extract the key for each element. + A function to map each source element to an element in an observable group. + The initial number of elements that the underlying dictionary can contain. + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + or or is null. + is less than 0. + + + + Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer and selects the resulting elements by using a specified function. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + The type of the elements within the groups computed for each element in the source sequence. + An observable sequence whose elements to group. + A function to extract the key for each element. + A function to map each source element to an element in an observable group. + The initial number of elements that the underlying dictionary can contain. + An equality comparer to compare keys with. + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + or or or is null. + is less than 0. + + + + Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. + A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + The type of the elements within the groups computed for each element in the source sequence. + The type of the elements in the duration sequences obtained for each group to denote its lifetime. + An observable sequence whose elements to group. + A function to extract the key for each element. + A function to map each source element to an element in an observable group. + A function to signal the expiration of a group. + An equality comparer to compare keys with. + + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encountered. + + or or or or is null. + + + + Groups the elements of an observable sequence according to a specified key selector function and selects the resulting elements by using a specified function. + A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + The type of the elements within the groups computed for each element in the source sequence. + The type of the elements in the duration sequences obtained for each group to denote its lifetime. + An observable sequence whose elements to group. + A function to extract the key for each element. + A function to map each source element to an element in an observable group. + A function to signal the expiration of a group. + + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + + or or or is null. + + + + Groups the elements of an observable sequence according to a specified key selector function and comparer. + A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + The type of the elements in the duration sequences obtained for each group to denote its lifetime. + An observable sequence whose elements to group. + A function to extract the key for each element. + A function to signal the expiration of a group. + An equality comparer to compare keys with. + + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + + or or or is null. + + + + Groups the elements of an observable sequence according to a specified key selector function. + A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + The type of the elements in the duration sequences obtained for each group to denote its lifetime. + An observable sequence whose elements to group. + A function to extract the key for each element. + A function to signal the expiration of a group. + + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + + or or is null. + + + + Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer and selects the resulting elements by using a specified function. + A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + The type of the elements within the groups computed for each element in the source sequence. + The type of the elements in the duration sequences obtained for each group to denote its lifetime. + An observable sequence whose elements to group. + A function to extract the key for each element. + A function to map each source element to an element in an observable group. + A function to signal the expiration of a group. + The initial number of elements that the underlying dictionary can contain. + An equality comparer to compare keys with. + + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encountered. + + or or or or is null. + is less than 0. + + + + Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and selects the resulting elements by using a specified function. + A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + The type of the elements within the groups computed for each element in the source sequence. + The type of the elements in the duration sequences obtained for each group to denote its lifetime. + An observable sequence whose elements to group. + A function to extract the key for each element. + A function to map each source element to an element in an observable group. + A function to signal the expiration of a group. + The initial number of elements that the underlying dictionary can contain. + + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + + or or or is null. + is less than 0. + + + + Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer. + A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + The type of the elements in the duration sequences obtained for each group to denote its lifetime. + An observable sequence whose elements to group. + A function to extract the key for each element. + A function to signal the expiration of a group. + The initial number of elements that the underlying dictionary can contain. + An equality comparer to compare keys with. + + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + + or or or is null. + is less than 0. + + + + Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function. + A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + + The type of the elements in the source sequence. + The type of the grouping key computed for each element in the source sequence. + The type of the elements in the duration sequences obtained for each group to denote its lifetime. + An observable sequence whose elements to group. + A function to extract the key for each element. + A function to signal the expiration of a group. + The initial number of elements that the underlying dictionary can contain. + + A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + + or or is null. + is less than 0. + + + + Correlates the elements of two sequences based on overlapping durations, and groups the results. + + The type of the elements in the left source sequence. + The type of the elements in the right source sequence. + The type of the elements in the duration sequence denoting the computed duration of each element in the left source sequence. + The type of the elements in the duration sequence denoting the computed duration of each element in the right source sequence. + The type of the elements in the result sequence, obtained by invoking the result selector function for source elements with overlapping duration. + The left observable sequence to join elements for. + The right observable sequence to join elements for. + A function to select the duration of each element of the left observable sequence, used to determine overlap. + A function to select the duration of each element of the right observable sequence, used to determine overlap. + A function invoked to compute a result element for any element of the left sequence with overlapping elements from the right observable sequence. + An observable sequence that contains result elements computed from source elements that have an overlapping duration. + or or or or is null. + + + + Correlates the elements of two sequences based on overlapping durations. + + The type of the elements in the left source sequence. + The type of the elements in the right source sequence. + The type of the elements in the duration sequence denoting the computed duration of each element in the left source sequence. + The type of the elements in the duration sequence denoting the computed duration of each element in the right source sequence. + The type of the elements in the result sequence, obtained by invoking the result selector function for source elements with overlapping duration. + The left observable sequence to join elements for. + The right observable sequence to join elements for. + A function to select the duration of each element of the left observable sequence, used to determine overlap. + A function to select the duration of each element of the right observable sequence, used to determine overlap. + A function invoked to compute a result element for any two overlapping elements of the left and right observable sequences. + An observable sequence that contains result elements computed from source elements that have an overlapping duration. + or or or or is null. + + + + Filters the elements of an observable sequence based on the specified type. + + The type to filter the elements in the source sequence on. + The observable sequence that contains the elements to be filtered. + An observable sequence that contains elements from the input sequence of type TResult. + is null. + + + + Projects each element of an observable sequence into a new form. + + The type of the elements in the source sequence. + The type of the elements in the result sequence, obtained by running the selector function for each element in the source sequence. + A sequence of elements to invoke a transform function on. + A transform function to apply to each source element. + An observable sequence whose elements are the result of invoking the transform function on each element of source. + or is null. + + + + Projects each element of an observable sequence into a new form by incorporating the element's index. + + The type of the elements in the source sequence. + The type of the elements in the result sequence, obtained by running the selector function for each element in the source sequence. + A sequence of elements to invoke a transform function on. + A transform function to apply to each source element; the second parameter of the function represents the index of the source element. + An observable sequence whose elements are the result of invoking the transform function on each element of source. + or is null. + + + + Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. + + The type of the elements in the source sequence. + The type of the elements in the other sequence and the elements in the result sequence. + An observable sequence of elements to project. + An observable sequence to project each element from the source sequence onto. + An observable sequence whose elements are the result of projecting each source element onto the other sequence and merging all the resulting sequences together. + or is null. + + + + Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + + The type of the elements in the source sequence. + The type of the elements in the projected inner sequences and the elements in the merged result sequence. + An observable sequence of elements to project. + A transform function to apply to each element. + An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + or is null. + + + + Projects each element of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. + + The type of the elements in the source sequence. + The type of the elements in the projected inner sequences and the elements in the merged result sequence. + An observable sequence of elements to project. + A transform function to apply to each element; the second parameter of the function represents the index of the source element. + An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + or is null. + + + + Projects each element of an observable sequence to a task and merges all of the task results into one observable sequence. + + The type of the elements in the source sequence. + The type of the result produced by the projected tasks and the elements in the merged result sequence. + An observable sequence of elements to project. + A transform function to apply to each element. + An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + or is null. + + + + Projects each element of an observable sequence to a task by incorporating the element's index and merges all of the task results into one observable sequence. + + The type of the elements in the source sequence. + The type of the result produced by the projected tasks and the elements in the merged result sequence. + An observable sequence of elements to project. + A transform function to apply to each element; the second parameter of the function represents the index of the source element. + An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + or is null. + + + + Projects each element of an observable sequence to a task with cancellation support and merges all of the task results into one observable sequence. + + The type of the elements in the source sequence. + The type of the result produced by the projected tasks and the elements in the merged result sequence. + An observable sequence of elements to project. + A transform function to apply to each element. + An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + or is null. + + + + Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support and merges all of the task results into one observable sequence. + + The type of the elements in the source sequence. + The type of the result produced by the projected tasks and the elements in the merged result sequence. + An observable sequence of elements to project. + A transform function to apply to each element; the second parameter of the function represents the index of the source element. + An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + or is null. + + + + Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + + The type of the elements in the source sequence. + The type of the elements in the projected intermediate sequences. + The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + An observable sequence of elements to project. + A transform function to apply to each element. + A transform function to apply to each element of the intermediate sequence. + An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + or or is null. + + + + Projects each element of an observable sequence to an observable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + + The type of the elements in the source sequence. + The type of the elements in the projected intermediate sequences. + The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + An observable sequence of elements to project. + A transform function to apply to each element; the second parameter of the function represents the index of the source element. + A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. + An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + or or is null. + + + + Projects each element of an observable sequence to a task, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + + The type of the elements in the source sequence. + The type of the results produced by the projected intermediate tasks. + The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + An observable sequence of elements to project. + A transform function to apply to each element. + A transform function to apply to each element of the intermediate sequence. + An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + or or is null. + This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + + + + Projects each element of an observable sequence to a task by incorporating the element's index, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + + The type of the elements in the source sequence. + The type of the results produced by the projected intermediate tasks. + The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + An observable sequence of elements to project. + A transform function to apply to each element; the second parameter of the function represents the index of the source element. + A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + or or is null. + This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + + + + Projects each element of an observable sequence to a task with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + + The type of the elements in the source sequence. + The type of the results produced by the projected intermediate tasks. + The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + An observable sequence of elements to project. + A transform function to apply to each element. + A transform function to apply to each element of the intermediate sequence. + An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + or or is null. + This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + + + + Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + + The type of the elements in the source sequence. + The type of the results produced by the projected intermediate tasks. + The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + An observable sequence of elements to project. + A transform function to apply to each element; the second parameter of the function represents the index of the source element. + A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + or or is null. + This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + + + + Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + + The type of the elements in the source sequence. + The type of the elements in the projected inner sequences and the elements in the merged result sequence. + An observable sequence of notifications to project. + A transform function to apply to each element. + A transform function to apply when an error occurs in the source sequence. + A transform function to apply when the end of the source sequence is reached. + An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. + or or or is null. + + + + Projects each notification of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. + + The type of the elements in the source sequence. + The type of the elements in the projected inner sequences and the elements in the merged result sequence. + An observable sequence of notifications to project. + A transform function to apply to each element; the second parameter of the function represents the index of the source element. + A transform function to apply when an error occurs in the source sequence. + A transform function to apply when the end of the source sequence is reached. + An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. + or or or is null. + + + + Projects each element of an observable sequence to an enumerable sequence and concatenates the resulting enumerable sequences into one observable sequence. + + The type of the elements in the source sequence. + The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + An observable sequence of elements to project. + A transform function to apply to each element. + An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + or is null. + The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + + + + Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index and concatenates the resulting enumerable sequences into one observable sequence. + + The type of the elements in the source sequence. + The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + An observable sequence of elements to project. + A transform function to apply to each element; the second parameter of the function represents the index of the source element. + An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + or is null. + The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + + + + Projects each element of an observable sequence to an enumerable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + + The type of the elements in the source sequence. + The type of the elements in the projected intermediate enumerable sequences. + The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + An observable sequence of elements to project. + A transform function to apply to each element. + A transform function to apply to each element of the intermediate sequence. + An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + or or is null. + The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + + + + Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + + The type of the elements in the source sequence. + The type of the elements in the projected intermediate enumerable sequences. + The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + An observable sequence of elements to project. + A transform function to apply to each element; the second parameter of the function represents the index of the source element. + A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. + An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + or or is null. + The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + + + + Bypasses a specified number of elements in an observable sequence and then returns the remaining elements. + + The type of the elements in the source sequence. + The sequence to take elements from. + The number of elements to skip before returning the remaining elements. + An observable sequence that contains the elements that occur after the specified index in the input sequence. + is null. + is less than zero. + + + + Bypasses elements in an observable sequence as long as a specified condition is true and then returns the remaining elements. + + The type of the elements in the source sequence. + An observable sequence to return elements from. + A function to test each element for a condition. + An observable sequence that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate. + or is null. + + + + Bypasses elements in an observable sequence as long as a specified condition is true and then returns the remaining elements. + The element's index is used in the logic of the predicate function. + + The type of the elements in the source sequence. + An observable sequence to return elements from. + A function to test each element for a condition; the second parameter of the function represents the index of the source element. + An observable sequence that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate. + or is null. + + + + Returns a specified number of contiguous elements from the start of an observable sequence. + + The type of the elements in the source sequence. + The sequence to take elements from. + The number of elements to return. + An observable sequence that contains the specified number of elements from the start of the input sequence. + is null. + is less than zero. + + + + Returns a specified number of contiguous elements from the start of an observable sequence, using the specified scheduler for the edge case of Take(0). + + The type of the elements in the source sequence. + The sequence to take elements from. + The number of elements to return. + Scheduler used to produce an OnCompleted message in case count is set to 0. + An observable sequence that contains the specified number of elements from the start of the input sequence. + or is null. + is less than zero. + + + + Returns elements from an observable sequence as long as a specified condition is true. + + The type of the elements in the source sequence. + A sequence to return elements from. + A function to test each element for a condition. + An observable sequence that contains the elements from the input sequence that occur before the element at which the test no longer passes. + or is null. + + + + Returns elements from an observable sequence as long as a specified condition is true. + The element's index is used in the logic of the predicate function. + + The type of the elements in the source sequence. + A sequence to return elements from. + A function to test each element for a condition; the second parameter of the function represents the index of the source element. + An observable sequence that contains the elements from the input sequence that occur before the element at which the test no longer passes. + or is null. + + + + Filters the elements of an observable sequence based on a predicate. + + The type of the elements in the source sequence. + An observable sequence whose elements to filter. + A function to test each source element for a condition. + An observable sequence that contains elements from the input sequence that satisfy the condition. + or is null. + + + + Filters the elements of an observable sequence based on a predicate by incorporating the element's index. + + The type of the elements in the source sequence. + An observable sequence whose elements to filter. + A function to test each source element for a conditio; the second parameter of the function represents the index of the source element. + An observable sequence that contains elements from the input sequence that satisfy the condition. + or is null. + + + + Projects each element of an observable sequence into consecutive non-overlapping buffers which are produced based on timing information. + + The type of the elements in the source sequence, and in the lists in the result sequence. + Source sequence to produce buffers over. + Length of each buffer. + An observable sequence of buffers. + is null. + is less than TimeSpan.Zero. + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create buffers as fast as it can. + Because all source sequence elements end up in one of the buffers, some buffers won't have a zero time span. This is a side-effect of the asynchrony introduced + by the scheduler, where the action to close the current buffer and to create a new buffer may not execute immediately, despite the TimeSpan.Zero due time. + + + + + Projects each element of an observable sequence into consecutive non-overlapping buffers which are produced based on timing information, using the specified scheduler to run timers. + + The type of the elements in the source sequence, and in the lists in the result sequence. + Source sequence to produce buffers over. + Length of each buffer. + Scheduler to run buffering timers on. + An observable sequence of buffers. + or is null. + is less than TimeSpan.Zero. + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create buffers as fast as it can. + Because all source sequence elements end up in one of the buffers, some buffers won't have a zero time span. This is a side-effect of the asynchrony introduced + by the scheduler, where the action to close the current buffer and to create a new buffer may not execute immediately, despite the TimeSpan.Zero due time. + + + + + Projects each element of an observable sequence into zero or more buffers which are produced based on timing information. + + The type of the elements in the source sequence, and in the lists in the result sequence. + Source sequence to produce buffers over. + Length of each buffer. + Interval between creation of consecutive buffers. + An observable sequence of buffers. + is null. + or is less than TimeSpan.Zero. + + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create buffers with minimum duration + length. However, some buffers won't have a zero time span. This is a side-effect of the asynchrony introduced by the scheduler, where the action to close the + current buffer may not execute immediately, despite the TimeSpan.Zero due time. + + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create buffers as fast as it can. + However, this doesn't mean all buffers will start at the beginning of the source sequence. This is a side-effect of the asynchrony introduced by the scheduler, + where the action to create a new buffer may not execute immediately, despite the TimeSpan.Zero due time. + + + + + + Projects each element of an observable sequence into zero or more buffers which are produced based on timing information, using the specified scheduler to run timers. + + The type of the elements in the source sequence, and in the lists in the result sequence. + Source sequence to produce buffers over. + Length of each buffer. + Interval between creation of consecutive buffers. + Scheduler to run buffering timers on. + An observable sequence of buffers. + or is null. + or is less than TimeSpan.Zero. + + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create buffers with minimum duration + length. However, some buffers won't have a zero time span. This is a side-effect of the asynchrony introduced by the scheduler, where the action to close the + current buffer may not execute immediately, despite the TimeSpan.Zero due time. + + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create buffers as fast as it can. + However, this doesn't mean all buffers will start at the beginning of the source sequence. This is a side-effect of the asynchrony introduced by the scheduler, + where the action to create a new buffer may not execute immediately, despite the TimeSpan.Zero due time. + + + + + + Projects each element of an observable sequence into a buffer that's sent out when either it's full or a given amount of time has elapsed. + A useful real-world analogy of this overload is the behavior of a ferry leaving the dock when all seats are taken, or at the scheduled time of departure, whichever event occurs first. + + The type of the elements in the source sequence, and in the lists in the result sequence. + Source sequence to produce buffers over. + Maximum time length of a window. + Maximum element count of a window. + An observable sequence of buffers. + is null. + is less than TimeSpan.Zero. -or- is less than or equal to zero. + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create buffers as fast as it can. + Because all source sequence elements end up in one of the buffers, some buffers won't have a zero time span. This is a side-effect of the asynchrony introduced + by the scheduler, where the action to close the current buffer and to create a new buffer may not execute immediately, despite the TimeSpan.Zero due time. + + + + + Projects each element of an observable sequence into a buffer that's sent out when either it's full or a given amount of time has elapsed, using the specified scheduler to run timers. + A useful real-world analogy of this overload is the behavior of a ferry leaving the dock when all seats are taken, or at the scheduled time of departure, whichever event occurs first. + + The type of the elements in the source sequence, and in the lists in the result sequence. + Source sequence to produce buffers over. + Maximum time length of a buffer. + Maximum element count of a buffer. + Scheduler to run buffering timers on. + An observable sequence of buffers. + or is null. + is less than TimeSpan.Zero. -or- is less than or equal to zero. + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create buffers as fast as it can. + Because all source sequence elements end up in one of the buffers, some buffers won't have a zero time span. This is a side-effect of the asynchrony introduced + by the scheduler, where the action to close the current buffer and to create a new buffer may not execute immediately, despite the TimeSpan.Zero due time. + + + + + Time shifts the observable sequence by the specified relative time duration. + The relative time intervals between the values are preserved. + + The type of the elements in the source sequence. + Source sequence to delay values for. + Relative time by which to shift the observable sequence. If this value is equal to TimeSpan.Zero, the scheduler will dispatch observer callbacks as soon as possible. + Time-shifted sequence. + is null. + is less than TimeSpan.Zero. + + + This operator is less efficient than DelaySubscription because it records all notifications and time-delays those. This allows for immediate propagation of errors. + + + Observer callbacks for the resulting sequence will be run on the default scheduler. This effect is similar to using ObserveOn. + + + Exceptions signaled by the source sequence through an OnError callback are forwarded immediately to the result sequence. Any OnNext notifications that were in the queue at the point of the OnError callback will be dropped. + In order to delay error propagation, consider using the Observable.Materialize and Observable.Dematerialize operators, or use DelaySubscription. + + + + + + Time shifts the observable sequence by the specified relative time duration, using the specified scheduler to run timers. + The relative time intervals between the values are preserved. + + The type of the elements in the source sequence. + Source sequence to delay values for. + Relative time by which to shift the observable sequence. If this value is equal to TimeSpan.Zero, the scheduler will dispatch observer callbacks as soon as possible. + Scheduler to run the delay timers on. + Time-shifted sequence. + or is null. + is less than TimeSpan.Zero. + + + This operator is less efficient than DelaySubscription because it records all notifications and time-delays those. This allows for immediate propagation of errors. + + + Observer callbacks for the resulting sequence will be run on the specified scheduler. This effect is similar to using ObserveOn. + + + Exceptions signaled by the source sequence through an OnError callback are forwarded immediately to the result sequence. Any OnNext notifications that were in the queue at the point of the OnError callback will be dropped. + + + Exceptions signaled by the source sequence through an OnError callback are forwarded immediately to the result sequence. Any OnNext notifications that were in the queue at the point of the OnError callback will be dropped. + In order to delay error propagation, consider using the Observable.Materialize and Observable.Dematerialize operators, or use DelaySubscription. + + + + + + Time shifts the observable sequence to start propagating notifications at the specified absolute time. + The relative time intervals between the values are preserved. + + The type of the elements in the source sequence. + Source sequence to delay values for. + Absolute time used to shift the observable sequence; the relative time shift gets computed upon subscription. If this value is less than or equal to DateTimeOffset.UtcNow, the scheduler will dispatch observer callbacks as soon as possible. + Time-shifted sequence. + is null. + + + This operator is less efficient than DelaySubscription because it records all notifications and time-delays those. This allows for immediate propagation of errors. + + + Observer callbacks for the resulting sequence will be run on the default scheduler. This effect is similar to using ObserveOn. + + + Exceptions signaled by the source sequence through an OnError callback are forwarded immediately to the result sequence. Any OnNext notifications that were in the queue at the point of the OnError callback will be dropped. + In order to delay error propagation, consider using the Observable.Materialize and Observable.Dematerialize operators, or use DelaySubscription. + + + + + + Time shifts the observable sequence to start propagating notifications at the specified absolute time, using the specified scheduler to run timers. + The relative time intervals between the values are preserved. + + The type of the elements in the source sequence. + Source sequence to delay values for. + Absolute time used to shift the observable sequence; the relative time shift gets computed upon subscription. If this value is less than or equal to DateTimeOffset.UtcNow, the scheduler will dispatch observer callbacks as soon as possible. + Scheduler to run the delay timers on. + Time-shifted sequence. + or is null. + + + This operator is less efficient than DelaySubscription because it records all notifications and time-delays those. This allows for immediate propagation of errors. + + + Observer callbacks for the resulting sequence will be run on the specified scheduler. This effect is similar to using ObserveOn. + + + Exceptions signaled by the source sequence through an OnError callback are forwarded immediately to the result sequence. Any OnNext notifications that were in the queue at the point of the OnError callback will be dropped. + In order to delay error propagation, consider using the Observable.Materialize and Observable.Dematerialize operators, or use DelaySubscription. + + + + + + Time shifts the observable sequence based on a delay selector function for each element. + + The type of the elements in the source sequence. + The type of the elements in the delay sequences used to denote the delay duration of each element in the source sequence. + Source sequence to delay values for. + Selector function to retrieve a sequence indicating the delay for each given element. + Time-shifted sequence. + or is null. + + + + Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. + + The type of the elements in the source sequence. + The type of the elements in the delay sequences used to denote the delay duration of each element in the source sequence. + Source sequence to delay values for. + Sequence indicating the delay for the subscription to the source. + Selector function to retrieve a sequence indicating the delay for each given element. + Time-shifted sequence. + or or is null. + + + + Time shifts the observable sequence by delaying the subscription with the specified relative time duration. + + The type of the elements in the source sequence. + Source sequence to delay subscription for. + Relative time shift of the subscription. + Time-shifted sequence. + is null. + is less than TimeSpan.Zero. + + + This operator is more efficient than Delay but postpones all side-effects of subscription and affects error propagation timing. + + + The side-effects of subscribing to the source sequence will be run on the default scheduler. Observer callbacks will not be affected. + + + + + + Time shifts the observable sequence by delaying the subscription with the specified relative time duration, using the specified scheduler to run timers. + + The type of the elements in the source sequence. + Source sequence to delay subscription for. + Relative time shift of the subscription. + Scheduler to run the subscription delay timer on. + Time-shifted sequence. + or is null. + is less than TimeSpan.Zero. + + + This operator is more efficient than Delay but postpones all side-effects of subscription and affects error propagation timing. + + + The side-effects of subscribing to the source sequence will be run on the specified scheduler. Observer callbacks will not be affected. + + + + + + Time shifts the observable sequence by delaying the subscription to the specified absolute time. + + The type of the elements in the source sequence. + Source sequence to delay subscription for. + Absolute time to perform the subscription at. + Time-shifted sequence. + is null. + + + This operator is more efficient than Delay but postpones all side-effects of subscription and affects error propagation timing. + + + The side-effects of subscribing to the source sequence will be run on the default scheduler. Observer callbacks will not be affected. + + + + + + Time shifts the observable sequence by delaying the subscription to the specified absolute time, using the specified scheduler to run timers. + + The type of the elements in the source sequence. + Source sequence to delay subscription for. + Absolute time to perform the subscription at. + Scheduler to run the subscription delay timer on. + Time-shifted sequence. + or is null. + + + This operator is more efficient than Delay but postpones all side-effects of subscription and affects error propagation timing. + + + The side-effects of subscribing to the source sequence will be run on the specified scheduler. Observer callbacks will not be affected. + + + + + + Generates an observable sequence by running a state-driven and temporal loop producing the sequence's elements. + + The type of the state used in the generator loop. + The type of the elements in the produced sequence. + Initial state. + Condition to terminate generation (upon returning false). + Iteration step function. + Selector function for results produced in the sequence. + Time selector function to control the speed of values being produced each iteration. + The generated sequence. + or or or is null. + + + + Generates an observable sequence by running a state-driven and temporal loop producing the sequence's elements, using the specified scheduler to run timers and to send out observer messages. + + The type of the state used in the generator loop. + The type of the elements in the produced sequence. + Initial state. + Condition to terminate generation (upon returning false). + Iteration step function. + Selector function for results produced in the sequence. + Time selector function to control the speed of values being produced each iteration. + Scheduler on which to run the generator loop. + The generated sequence. + or or or or is null. + + + + Generates an observable sequence by running a state-driven and temporal loop producing the sequence's elements. + + The type of the state used in the generator loop. + The type of the elements in the produced sequence. + Initial state. + Condition to terminate generation (upon returning false). + Iteration step function. + Selector function for results produced in the sequence. + Time selector function to control the speed of values being produced each iteration. + The generated sequence. + or or or is null. + + + + Generates an observable sequence by running a state-driven and temporal loop producing the sequence's elements, using the specified scheduler to run timers and to send out observer messages. + + The type of the state used in the generator loop. + The type of the elements in the produced sequence. + Initial state. + Condition to terminate generation (upon returning false). + Iteration step function. + Selector function for results produced in the sequence. + Time selector function to control the speed of values being produced each iteration. + Scheduler on which to run the generator loop. + The generated sequence. + or or or or is null. + + + + Returns an observable sequence that produces a value after each period. + + Period for producing the values in the resulting sequence. If this value is equal to TimeSpan.Zero, the timer will recur as fast as possible. + An observable sequence that produces a value after each period. + is less than TimeSpan.Zero. + + Intervals are measured between the start of subsequent notifications, not between the end of the previous and the start of the next notification. + If the observer takes longer than the interval period to handle the message, the subsequent notification will be delivered immediately after the + current one has been handled. In case you need to control the time between the end and the start of consecutive notifications, consider using the + + operator instead. + + + + + Returns an observable sequence that produces a value after each period, using the specified scheduler to run timers and to send out observer messages. + + Period for producing the values in the resulting sequence. If this value is equal to TimeSpan.Zero, the timer will recur as fast as possible. + Scheduler to run the timer on. + An observable sequence that produces a value after each period. + is less than TimeSpan.Zero. + is null. + + Intervals are measured between the start of subsequent notifications, not between the end of the previous and the start of the next notification. + If the observer takes longer than the interval period to handle the message, the subsequent notification will be delivered immediately after the + current one has been handled. In case you need to control the time between the end and the start of consecutive notifications, consider using the + + operator instead. + + + + + Samples the observable sequence at each interval. + Upon each sampling tick, the latest element (if any) in the source sequence during the last sampling interval is sent to the resulting sequence. + + The type of the elements in the source sequence. + Source sequence to sample. + Interval at which to sample. If this value is equal to TimeSpan.Zero, the scheduler will continuously sample the stream. + Sampled observable sequence. + is null. + is less than TimeSpan.Zero. + + Specifying a TimeSpan.Zero value for doesn't guarantee all source sequence elements will be preserved. This is a side-effect + of the asynchrony introduced by the scheduler, where the sampling action may not execute immediately, despite the TimeSpan.Zero due time. + + + + + Samples the observable sequence at each interval, using the specified scheduler to run sampling timers. + Upon each sampling tick, the latest element (if any) in the source sequence during the last sampling interval is sent to the resulting sequence. + + The type of the elements in the source sequence. + Source sequence to sample. + Interval at which to sample. If this value is equal to TimeSpan.Zero, the scheduler will continuously sample the stream. + Scheduler to run the sampling timer on. + Sampled observable sequence. + or is null. + is less than TimeSpan.Zero. + + Specifying a TimeSpan.Zero value for doesn't guarantee all source sequence elements will be preserved. This is a side-effect + of the asynchrony introduced by the scheduler, where the sampling action may not execute immediately, despite the TimeSpan.Zero due time. + + + + + Samples the source observable sequence using a samper observable sequence producing sampling ticks. + Upon each sampling tick, the latest element (if any) in the source sequence during the last sampling interval is sent to the resulting sequence. + + The type of the elements in the source sequence. + The type of the elements in the sampling sequence. + Source sequence to sample. + Sampling tick sequence. + Sampled observable sequence. + or is null. + + + + Skips elements for the specified duration from the start of the observable source sequence. + + The type of the elements in the source sequence. + Source sequence to skip elements for. + Duration for skipping elements from the start of the sequence. + An observable sequence with the elements skipped during the specified duration from the start of the source sequence. + is null. + is less than TimeSpan.Zero. + + + Specifying a TimeSpan.Zero value for doesn't guarantee no elements will be dropped from the start of the source sequence. + This is a side-effect of the asynchrony introduced by the scheduler, where the action that causes callbacks from the source sequence to be forwarded + may not execute immediately, despite the TimeSpan.Zero due time. + + + Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the . + + + + + + Skips elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. + + The type of the elements in the source sequence. + Source sequence to skip elements for. + Duration for skipping elements from the start of the sequence. + Scheduler to run the timer on. + An observable sequence with the elements skipped during the specified duration from the start of the source sequence. + or is null. + is less than TimeSpan.Zero. + + + Specifying a TimeSpan.Zero value for doesn't guarantee no elements will be dropped from the start of the source sequence. + This is a side-effect of the asynchrony introduced by the scheduler, where the action that causes callbacks from the source sequence to be forwarded + may not execute immediately, despite the TimeSpan.Zero due time. + + + Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the . + + + + + + Skips elements for the specified duration from the end of the observable source sequence. + + The type of the elements in the source sequence. + Source sequence to skip elements for. + Duration for skipping elements from the end of the sequence. + An observable sequence with the elements skipped during the specified duration from the end of the source sequence. + is null. + is less than TimeSpan.Zero. + + This operator accumulates a queue with a length enough to store elements received during the initial window. + As more elements are received, elements older than the specified are taken from the queue and produced on the + result sequence. This causes elements to be delayed with . + + + + + Skips elements for the specified duration from the end of the observable source sequence, using the specified scheduler to run timers. + + The type of the elements in the source sequence. + Source sequence to skip elements for. + Duration for skipping elements from the end of the sequence. + Scheduler to run the timer on. + An observable sequence with the elements skipped during the specified duration from the end of the source sequence. + or is null. + is less than TimeSpan.Zero. + + This operator accumulates a queue with a length enough to store elements received during the initial window. + As more elements are received, elements older than the specified are taken from the queue and produced on the + result sequence. This causes elements to be delayed with . + + + + + Skips elements from the observable source sequence until the specified start time. + + The type of the elements in the source sequence. + Source sequence to skip elements for. + Time to start taking elements from the source sequence. If this value is less than or equal to DateTimeOffset.UtcNow, no elements will be skipped. + An observable sequence with the elements skipped until the specified start time. + is null. + + Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the . + + + + + Skips elements from the observable source sequence until the specified start time, using the specified scheduler to run timers. + + The type of the elements in the source sequence. + Source sequence to skip elements for. + Time to start taking elements from the source sequence. If this value is less than or equal to DateTimeOffset.UtcNow, no elements will be skipped. + Scheduler to run the timer on. + An observable sequence with the elements skipped until the specified start time. + or is null. + + Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the . + + + + + Takes elements for the specified duration from the start of the observable source sequence. + + The type of the elements in the source sequence. + Source sequence to take elements from. + Duration for taking elements from the start of the sequence. + An observable sequence with the elements taken during the specified duration from the start of the source sequence. + is null. + is less than TimeSpan.Zero. + + Specifying a TimeSpan.Zero value for doesn't guarantee an empty sequence will be returned. This is a side-effect + of the asynchrony introduced by the scheduler, where the action that stops forwarding callbacks from the source sequence may not execute + immediately, despite the TimeSpan.Zero due time. + + + + + Takes elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. + + The type of the elements in the source sequence. + Source sequence to take elements from. + Duration for taking elements from the start of the sequence. + Scheduler to run the timer on. + An observable sequence with the elements taken during the specified duration from the start of the source sequence. + or is null. + is less than TimeSpan.Zero. + + Specifying a TimeSpan.Zero value for doesn't guarantee an empty sequence will be returned. This is a side-effect + of the asynchrony introduced by the scheduler, where the action that stops forwarding callbacks from the source sequence may not execute + immediately, despite the TimeSpan.Zero due time. + + + + + Returns elements within the specified duration from the end of the observable source sequence. + + The type of the elements in the source sequence. + Source sequence to take elements from. + Duration for taking elements from the end of the sequence. + An observable sequence with the elements taken during the specified duration from the end of the source sequence. + is null. + is less than TimeSpan.Zero. + + This operator accumulates a buffer with a length enough to store elements for any window during the lifetime of + the source sequence. Upon completion of the source sequence, this buffer is drained on the result sequence. This causes the result elements + to be delayed with . + + + + + Returns elements within the specified duration from the end of the observable source sequence, using the specified scheduler to run timers. + + The type of the elements in the source sequence. + Source sequence to take elements from. + Duration for taking elements from the end of the sequence. + Scheduler to run the timer on. + An observable sequence with the elements taken during the specified duration from the end of the source sequence. + or is null. + is less than TimeSpan.Zero. + + This operator accumulates a buffer with a length enough to store elements for any window during the lifetime of + the source sequence. Upon completion of the source sequence, this buffer is drained on the result sequence. This causes the result elements + to be delayed with . + + + + + Returns elements within the specified duration from the end of the observable source sequence, using the specified schedulers to run timers and to drain the collected elements. + + The type of the elements in the source sequence. + Source sequence to take elements from. + Duration for taking elements from the end of the sequence. + Scheduler to run the timer on. + Scheduler to drain the collected elements. + An observable sequence with the elements taken during the specified duration from the end of the source sequence. + or or is null. + is less than TimeSpan.Zero. + + This operator accumulates a buffer with a length enough to store elements for any window during the lifetime of + the source sequence. Upon completion of the source sequence, this buffer is drained on the result sequence. This causes the result elements + to be delayed with . + + + + + Returns a list with the elements within the specified duration from the end of the observable source sequence. + + The type of the elements in the source sequence. + Source sequence to take elements from. + Duration for taking elements from the end of the sequence. + An observable sequence containing a single list with the elements taken during the specified duration from the end of the source sequence. + is null. + is less than TimeSpan.Zero. + + This operator accumulates a buffer with a length enough to store elements for any window during the lifetime of + the source sequence. Upon completion of the source sequence, this buffer is produced on the result sequence. + + + + + Returns a list with the elements within the specified duration from the end of the observable source sequence, using the specified scheduler to run timers. + + The type of the elements in the source sequence. + Source sequence to take elements from. + Duration for taking elements from the end of the sequence. + Scheduler to run the timer on. + An observable sequence containing a single list with the elements taken during the specified duration from the end of the source sequence. + or is null. + is less than TimeSpan.Zero. + + This operator accumulates a buffer with a length enough to store elements for any window during the lifetime of + the source sequence. Upon completion of the source sequence, this buffer is produced on the result sequence. + + + + + Takes elements for the specified duration until the specified end time. + + The type of the elements in the source sequence. + Source sequence to take elements from. + Time to stop taking elements from the source sequence. If this value is less than or equal to DateTimeOffset.UtcNow, the result stream will complete immediately. + An observable sequence with the elements taken until the specified end time. + is null. + + + + Takes elements for the specified duration until the specified end time, using the specified scheduler to run timers. + + The type of the elements in the source sequence. + Source sequence to take elements from. + Time to stop taking elements from the source sequence. If this value is less than or equal to DateTimeOffset.UtcNow, the result stream will complete immediately. + Scheduler to run the timer on. + An observable sequence with the elements taken until the specified end time. + or is null. + + + + Ignores elements from an observable sequence which are followed by another element within a specified relative time duration. + + The type of the elements in the source sequence. + Source sequence to throttle. + Throttling duration for each element. + The throttled sequence. + is null. + is less than TimeSpan.Zero. + + + This operator throttles the source sequence by holding on to each element for the duration specified in . If another + element is produced within this time window, the element is dropped and a new timer is started for the current element, repeating this whole + process. For streams that never have gaps larger than or equal to between elements, the resulting stream won't + produce any elements. In order to reduce the volume of a stream whilst guaranteeing the periodic production of elements, consider using the + Observable.Sample set of operators. + + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing throttling timers to be scheduled + that are due immediately. However, this doesn't guarantee all elements will be retained in the result sequence. This is a side-effect of the + asynchrony introduced by the scheduler, where the action to forward the current element may not execute immediately, despite the TimeSpan.Zero + due time. In such cases, the next element may arrive before the scheduler gets a chance to run the throttling action. + + + + + + Ignores elements from an observable sequence which are followed by another element within a specified relative time duration, using the specified scheduler to run throttling timers. + + The type of the elements in the source sequence. + Source sequence to throttle. + Throttling duration for each element. + Scheduler to run the throttle timers on. + The throttled sequence. + or is null. + is less than TimeSpan.Zero. + + + This operator throttles the source sequence by holding on to each element for the duration specified in . If another + element is produced within this time window, the element is dropped and a new timer is started for the current element, repeating this whole + process. For streams that never have gaps larger than or equal to between elements, the resulting stream won't + produce any elements. In order to reduce the volume of a stream whilst guaranteeing the periodic production of elements, consider using the + Observable.Sample set of operators. + + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing throttling timers to be scheduled + that are due immediately. However, this doesn't guarantee all elements will be retained in the result sequence. This is a side-effect of the + asynchrony introduced by the scheduler, where the action to forward the current element may not execute immediately, despite the TimeSpan.Zero + due time. In such cases, the next element may arrive before the scheduler gets a chance to run the throttling action. + + + + + + Ignores elements from an observable sequence which are followed by another value within a computed throttle duration. + + The type of the elements in the source sequence. + The type of the elements in the throttle sequences selected for each element in the source sequence. + Source sequence to throttle. + Selector function to retrieve a sequence indicating the throttle duration for each given element. + The throttled sequence. + or is null. + + This operator throttles the source sequence by holding on to each element for the duration denoted by . + If another element is produced within this time window, the element is dropped and a new timer is started for the current element, repeating this + whole process. For streams where the duration computed by applying the to each element overlaps with + the occurrence of the successor element, the resulting stream won't produce any elements. In order to reduce the volume of a stream whilst + guaranteeing the periodic production of elements, consider using the Observable.Sample set of operators. + + + + + Records the time interval between consecutive elements in an observable sequence. + + The type of the elements in the source sequence. + Source sequence to record time intervals for. + An observable sequence with time interval information on elements. + is null. + + + + Records the time interval between consecutive elements in an observable sequence, using the specified scheduler to compute time intervals. + + The type of the elements in the source sequence. + Source sequence to record time intervals for. + Scheduler used to compute time intervals. + An observable sequence with time interval information on elements. + or is null. + + + + Applies a timeout policy for each element in the observable sequence. + If the next element isn't received within the specified timeout duration starting from its predecessor, a TimeoutException is propagated to the observer. + + The type of the elements in the source sequence. + Source sequence to perform a timeout for. + Maximum duration between values before a timeout occurs. + The source sequence with a TimeoutException in case of a timeout. + is null. + is less than TimeSpan.Zero. + (Asynchronous) If no element is produced within from the previous element. + + + In case you only want to timeout on the first element, consider using the + operator applied to the source sequence and a delayed sequence. Alternatively, the general-purpose overload + of Timeout, can be used. + + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing timeout timers to be scheduled that are due + immediately. However, this doesn't guarantee a timeout will occur, even for the first element. This is a side-effect of the asynchrony introduced by the + scheduler, where the action to propagate a timeout may not execute immediately, despite the TimeSpan.Zero due time. In such cases, the next element may + arrive before the scheduler gets a chance to run the timeout action. + + + + + + Applies a timeout policy for each element in the observable sequence, using the specified scheduler to run timeout timers. + If the next element isn't received within the specified timeout duration starting from its predecessor, a TimeoutException is propagated to the observer. + + The type of the elements in the source sequence. + Source sequence to perform a timeout for. + Maximum duration between values before a timeout occurs. + Scheduler to run the timeout timers on. + The source sequence with a TimeoutException in case of a timeout. + or is null. + is less than TimeSpan.Zero. + (Asynchronous) If no element is produced within from the previous element. + + + In case you only want to timeout on the first element, consider using the + operator applied to the source sequence and a delayed sequence. Alternatively, the general-purpose overload + of Timeout, can be used. + + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing timeout timers to be scheduled that are due + immediately. However, this doesn't guarantee a timeout will occur, even for the first element. This is a side-effect of the asynchrony introduced by the + scheduler, where the action to propagate a timeout may not execute immediately, despite the TimeSpan.Zero due time. In such cases, the next element may + arrive before the scheduler gets a chance to run the timeout action. + + + + + + Applies a timeout policy for each element in the observable sequence. + If the next element isn't received within the specified timeout duration starting from its predecessor, the other observable sequence is used to produce future messages from that point on. + + The type of the elements in the source sequence and the other sequence used upon a timeout. + Source sequence to perform a timeout for. + Maximum duration between values before a timeout occurs. + Sequence to return in case of a timeout. + The source sequence switching to the other sequence in case of a timeout. + or is null. + is less than TimeSpan.Zero. + + + In case you only want to timeout on the first element, consider using the + operator applied to the source sequence and a delayed sequence. Alternatively, the general-purpose overload + of Timeout, can be used. + + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing timeout timers to be scheduled that are due + immediately. However, this doesn't guarantee a timeout will occur, even for the first element. This is a side-effect of the asynchrony introduced by the + scheduler, where the action to propagate a timeout may not execute immediately, despite the TimeSpan.Zero due time. In such cases, the next element may + arrive before the scheduler gets a chance to run the timeout action. + + + + + + Applies a timeout policy for each element in the observable sequence, using the specified scheduler to run timeout timers. + If the next element isn't received within the specified timeout duration starting from its predecessor, the other observable sequence is used to produce future messages from that point on. + + The type of the elements in the source sequence and the other sequence used upon a timeout. + Source sequence to perform a timeout for. + Maximum duration between values before a timeout occurs. + Sequence to return in case of a timeout. + Scheduler to run the timeout timers on. + The source sequence switching to the other sequence in case of a timeout. + or or is null. + is less than TimeSpan.Zero. + + + In case you only want to timeout on the first element, consider using the + operator applied to the source sequence and a delayed sequence. Alternatively, the general-purpose overload + of Timeout, can be used. + + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing timeout timers to be scheduled that are due + immediately. However, this doesn't guarantee a timeout will occur, even for the first element. This is a side-effect of the asynchrony introduced by the + scheduler, where the action to propagate a timeout may not execute immediately, despite the TimeSpan.Zero due time. In such cases, the next element may + arrive before the scheduler gets a chance to run the timeout action. + + + + + + Applies a timeout policy to the observable sequence based on an absolute time. + If the sequence doesn't terminate before the specified absolute due time, a TimeoutException is propagated to the observer. + + The type of the elements in the source sequence. + Source sequence to perform a timeout for. + Time when a timeout occurs. If this value is less than or equal to DateTimeOffset.UtcNow, the timeout occurs immediately. + The source sequence with a TimeoutException in case of a timeout. + is null. + (Asynchronous) If the sequence hasn't terminated before . + + In case you only want to timeout on the first element, consider using the + operator applied to the source sequence and a delayed sequence. Alternatively, the general-purpose overload + of Timeout, can be used. + + + + + Applies a timeout policy to the observable sequence based on an absolute time, using the specified scheduler to run timeout timers. + If the sequence doesn't terminate before the specified absolute due time, a TimeoutException is propagated to the observer. + + The type of the elements in the source sequence. + Source sequence to perform a timeout for. + Time when a timeout occurs. If this value is less than or equal to DateTimeOffset.UtcNow, the timeout occurs immediately. + Scheduler to run the timeout timers on. + The source sequence with a TimeoutException in case of a timeout. + or is null. + (Asynchronous) If the sequence hasn't terminated before . + + In case you only want to timeout on the first element, consider using the + operator applied to the source sequence and a delayed sequence. Alternatively, the general-purpose overload + of Timeout, can be used. + + + + + Applies a timeout policy to the observable sequence based on an absolute time. + If the sequence doesn't terminate before the specified absolute due time, the other observable sequence is used to produce future messages from that point on. + + The type of the elements in the source sequence and the other sequence used upon a timeout. + Source sequence to perform a timeout for. + Time when a timeout occurs. If this value is less than or equal to DateTimeOffset.UtcNow, the timeout occurs immediately. + Sequence to return in case of a timeout. + The source sequence switching to the other sequence in case of a timeout. + or is null. + + In case you only want to timeout on the first element, consider using the + operator applied to the source sequence and a delayed sequence. Alternatively, the general-purpose overload + of Timeout, can be used. + + + + + Applies a timeout policy to the observable sequence based on an absolute time, using the specified scheduler to run timeout timers. + If the sequence doesn't terminate before the specified absolute due time, the other observable sequence is used to produce future messages from that point on. + + The type of the elements in the source sequence and the other sequence used upon a timeout. + Source sequence to perform a timeout for. + Time when a timeout occurs. If this value is less than or equal to DateTimeOffset.UtcNow, the timeout occurs immediately. + Sequence to return in case of a timeout. + Scheduler to run the timeout timers on. + The source sequence switching to the other sequence in case of a timeout. + or or is null. + + In case you only want to timeout on the first element, consider using the + operator applied to the source sequence and a delayed sequence. Alternatively, the general-purpose overload + of Timeout, can be used. + + + + + Applies a timeout policy to the observable sequence based on a timeout duration computed for each element. + If the next element isn't received within the computed duration starting from its predecessor, a TimeoutException is propagated to the observer. + + The type of the elements in the source sequence. + The type of the elements in the timeout sequences used to indicate the timeout duration for each element in the source sequence. + Source sequence to perform a timeout for. + Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. + The source sequence with a TimeoutException in case of a timeout. + or is null. + + + + Applies a timeout policy to the observable sequence based on a timeout duration computed for each element. + If the next element isn't received within the computed duration starting from its predecessor, the other observable sequence is used to produce future messages from that point on. + + The type of the elements in the source sequence and the other sequence used upon a timeout. + The type of the elements in the timeout sequences used to indicate the timeout duration for each element in the source sequence. + Source sequence to perform a timeout for. + Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. + Sequence to return in case of a timeout. + The source sequence switching to the other sequence in case of a timeout. + or or is null. + + + + Applies a timeout policy to the observable sequence based on an initial timeout duration for the first element, and a timeout duration computed for each subsequent element. + If the next element isn't received within the computed duration starting from its predecessor, a TimeoutException is propagated to the observer. + + The type of the elements in the source sequence. + The type of the elements in the timeout sequences used to indicate the timeout duration for each element in the source sequence. + Source sequence to perform a timeout for. + Observable sequence that represents the timeout for the first element. + Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. + The source sequence with a TimeoutException in case of a timeout. + or or is null. + + + + Applies a timeout policy to the observable sequence based on an initial timeout duration for the first element, and a timeout duration computed for each subsequent element. + If the next element isn't received within the computed duration starting from its predecessor, the other observable sequence is used to produce future messages from that point on. + + The type of the elements in the source sequence and the other sequence used upon a timeout. + The type of the elements in the timeout sequences used to indicate the timeout duration for each element in the source sequence. + Source sequence to perform a timeout for. + Observable sequence that represents the timeout for the first element. + Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. + Sequence to return in case of a timeout. + The source sequence switching to the other sequence in case of a timeout. + or or or is null. + + + + Returns an observable sequence that produces a single value after the specified relative due time has elapsed. + + Relative time at which to produce the value. If this value is less than or equal to TimeSpan.Zero, the timer will fire as soon as possible. + An observable sequence that produces a value after the due time has elapsed. + + + + Returns an observable sequence that produces a single value at the specified absolute due time. + + Absolute time at which to produce the value. If this value is less than or equal to DateTimeOffset.UtcNow, the timer will fire as soon as possible. + An observable sequence that produces a value at due time. + + + + Returns an observable sequence that periodically produces a value after the specified initial relative due time has elapsed. + + Relative time at which to produce the first value. If this value is less than or equal to TimeSpan.Zero, the timer will fire as soon as possible. + Period to produce subsequent values. If this value is equal to TimeSpan.Zero, the timer will recur as fast as possible. + An observable sequence that produces a value after due time has elapsed and then after each period. + is less than TimeSpan.Zero. + + + + Returns an observable sequence that periodically produces a value starting at the specified initial absolute due time. + + Absolute time at which to produce the first value. If this value is less than or equal to DateTimeOffset.UtcNow, the timer will fire as soon as possible. + Period to produce subsequent values. If this value is equal to TimeSpan.Zero, the timer will recur as fast as possible. + An observable sequence that produces a value at due time and then after each period. + is less than TimeSpan.Zero. + + + + Returns an observable sequence that produces a single value after the specified relative due time has elapsed, using the specified scheduler to run the timer. + + Relative time at which to produce the value. If this value is less than or equal to TimeSpan.Zero, the timer will fire as soon as possible. + Scheduler to run the timer on. + An observable sequence that produces a value after the due time has elapsed. + is null. + + + + Returns an observable sequence that produces a single value at the specified absolute due time, using the specified scheduler to run the timer. + + Absolute time at which to produce the value. If this value is less than or equal to DateTimeOffset.UtcNow, the timer will fire as soon as possible. + Scheduler to run the timer on. + An observable sequence that produces a value at due time. + is null. + + + + Returns an observable sequence that periodically produces a value after the specified initial relative due time has elapsed, using the specified scheduler to run timers. + + Relative time at which to produce the first value. If this value is less than or equal to TimeSpan.Zero, the timer will fire as soon as possible. + Period to produce subsequent values. If this value is equal to TimeSpan.Zero, the timer will recur as fast as possible. + Scheduler to run timers on. + An observable sequence that produces a value after due time has elapsed and then each period. + is less than TimeSpan.Zero. + is null. + + + + Returns an observable sequence that periodically produces a value starting at the specified initial absolute due time, using the specified scheduler to run timers. + + Absolute time at which to produce the first value. If this value is less than or equal to DateTimeOffset.UtcNow, the timer will fire as soon as possible. + Period to produce subsequent values. If this value is equal to TimeSpan.Zero, the timer will recur as fast as possible. + Scheduler to run timers on. + An observable sequence that produces a value at due time and then after each period. + is less than TimeSpan.Zero. + is null. + + + + Timestamps each element in an observable sequence using the local system clock. + + The type of the elements in the source sequence. + Source sequence to timestamp elements for. + An observable sequence with timestamp information on elements. + is null. + + + + Timestamp each element in an observable sequence using the clock of the specified scheduler. + + The type of the elements in the source sequence. + Source sequence to timestamp elements for. + Scheduler used to compute timestamps. + An observable sequence with timestamp information on elements. + or is null. + + + + Projects each element of an observable sequence into consecutive non-overlapping windows which are produced based on timing information. + + The type of the elements in the source sequence, and in the windows in the result sequence. + Source sequence to produce windows over. + Length of each window. + The sequence of windows. + is null. + is less than TimeSpan.Zero. + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create windows as fast as it can. + Because all source sequence elements end up in one of the windows, some windows won't have a zero time span. This is a side-effect of the asynchrony introduced + by the scheduler, where the action to close the current window and to create a new window may not execute immediately, despite the TimeSpan.Zero due time. + + + + + Projects each element of an observable sequence into consecutive non-overlapping windows which are produced based on timing information, using the specified scheduler to run timers. + + The type of the elements in the source sequence, and in the windows in the result sequence. + Source sequence to produce windows over. + Length of each window. + Scheduler to run windowing timers on. + An observable sequence of windows. + or is null. + is less than TimeSpan.Zero. + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create windows as fast as it can. + Because all source sequence elements end up in one of the windows, some windows won't have a zero time span. This is a side-effect of the asynchrony introduced + by the scheduler, where the action to close the current window and to create a new window may not execute immediately, despite the TimeSpan.Zero due time. + + + + + Projects each element of an observable sequence into zero or more windows which are produced based on timing information. + + The type of the elements in the source sequence, and in the windows in the result sequence. + Source sequence to produce windows over. + Length of each window. + Interval between creation of consecutive windows. + An observable sequence of windows. + is null. + or is less than TimeSpan.Zero. + + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create windows with minimum duration + length. However, some windows won't have a zero time span. This is a side-effect of the asynchrony introduced by the scheduler, where the action to close the + current window may not execute immediately, despite the TimeSpan.Zero due time. + + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create windows as fast as it can. + However, this doesn't mean all windows will start at the beginning of the source sequence. This is a side-effect of the asynchrony introduced by the scheduler, + where the action to create a new window may not execute immediately, despite the TimeSpan.Zero due time. + + + + + + Projects each element of an observable sequence into zero or more windows which are produced based on timing information, using the specified scheduler to run timers. + + The type of the elements in the source sequence, and in the windows in the result sequence. + Source sequence to produce windows over. + Length of each window. + Interval between creation of consecutive windows. + Scheduler to run windowing timers on. + An observable sequence of windows. + or is null. + or is less than TimeSpan.Zero. + + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create windows with minimum duration + length. However, some windows won't have a zero time span. This is a side-effect of the asynchrony introduced by the scheduler, where the action to close the + current window may not execute immediately, despite the TimeSpan.Zero due time. + + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create windows as fast as it can. + However, this doesn't mean all windows will start at the beginning of the source sequence. This is a side-effect of the asynchrony introduced by the scheduler, + where the action to create a new window may not execute immediately, despite the TimeSpan.Zero due time. + + + + + + Projects each element of an observable sequence into a window that is completed when either it's full or a given amount of time has elapsed. + A useful real-world analogy of this overload is the behavior of a ferry leaving the dock when all seats are taken, or at the scheduled time of departure, whichever event occurs first. + + The type of the elements in the source sequence, and in the windows in the result sequence. + Source sequence to produce windows over. + Maximum time length of a window. + Maximum element count of a window. + An observable sequence of windows. + is null. + is less than TimeSpan.Zero. -or- is less than or equal to zero. + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create windows as fast as it can. + Because all source sequence elements end up in one of the windows, some windows won't have a zero time span. This is a side-effect of the asynchrony introduced + by the scheduler, where the action to close the current window and to create a new window may not execute immediately, despite the TimeSpan.Zero due time. + + + + + Projects each element of an observable sequence into a window that is completed when either it's full or a given amount of time has elapsed, using the specified scheduler to run timers. + A useful real-world analogy of this overload is the behavior of a ferry leaving the dock when all seats are taken, or at the scheduled time of departure, whichever event occurs first. + + The type of the elements in the source sequence, and in the windows in the result sequence. + Source sequence to produce windows over. + Maximum time length of a window. + Maximum element count of a window. + Scheduler to run windowing timers on. + An observable sequence of windows. + or is null. + is less than TimeSpan.Zero. -or- is less than or equal to zero. + + Specifying a TimeSpan.Zero value for is not recommended but supported, causing the scheduler to create windows as fast as it can. + Because all source sequence elements end up in one of the windows, some windows won't have a zero time span. This is a side-effect of the asynchrony introduced + by the scheduler, where the action to close the current window and to create a new window may not execute immediately, despite the TimeSpan.Zero due time. + + + + + Internal interface describing the LINQ to Events query language. + + + + + Base class for classes that expose an observable sequence as a well-known event pattern (sender, event arguments). + Contains functionality to maintain a map of event handler delegates to observable sequence subscriptions. Subclasses + should only add an event with custom add and remove methods calling into the base class's operations. + + The type of the sender that raises the event. + The type of the event data generated by the event. + + + + Creates a new event pattern source. + + Source sequence to expose as an event. + Delegate used to invoke the event for each element of the sequence. + or is null. + + + + Adds the specified event handler, causing a subscription to the underlying source. + + Event handler to add. The same delegate should be passed to the Remove operation in order to remove the event handler. + Invocation delegate to raise the event in the derived class. + or is null. + + + + Removes the specified event handler, causing a disposal of the corresponding subscription to the underlying source that was created during the Add operation. + + Event handler to remove. This should be the same delegate as one that was passed to the Add operation. + is null. + + + + Represents a .NET event invocation consisting of the weakly typed object that raised the event and the data that was generated by the event. + + The type of the event data generated by the event. + + + + Represents a .NET event invocation consisting of the strongly typed object that raised the event and the data that was generated by the event. + + The type of the sender that raised the event. + The type of the event data generated by the event. + + + + Creates a new data representation instance of a .NET event invocation with the given sender and event data. + + The sender object that raised the event. + The event data that was generated by the event. + + + + Determines whether the current EventPattern<TSender, TEventArgs> object represents the same event as a specified EventPattern<TSender, TEventArgs> object. + + An object to compare to the current EventPattern<TSender, TEventArgs> object. + true if both EventPattern<TSender, TEventArgs> objects represent the same event; otherwise, false. + + + + Determines whether the specified System.Object is equal to the current EventPattern<TSender, TEventArgs>. + + The System.Object to compare with the current EventPattern<TSender, TEventArgs>. + true if the specified System.Object is equal to the current EventPattern<TSender, TEventArgs>; otherwise, false. + + + + Returns the hash code for the current EventPattern<TSender, TEventArgs> instance. + + A hash code for the current EventPattern<TSender, TEventArgs> instance. + + + + Determines whether two specified EventPattern<TSender, TEventArgs> objects represent the same event. + + The first EventPattern<TSender, TEventArgs> to compare, or null. + The second EventPattern<TSender, TEventArgs> to compare, or null. + true if both EventPattern<TSender, TEventArgs> objects represent the same event; otherwise, false. + + + + Determines whether two specified EventPattern<TSender, TEventArgs> objects represent a different event. + + The first EventPattern<TSender, TEventArgs> to compare, or null. + The second EventPattern<TSender, TEventArgs> to compare, or null. + true if both EventPattern<TSender, TEventArgs> objects don't represent the same event; otherwise, false. + + + + Gets the sender object that raised the event. + + + + + Gets the event data that was generated by the event. + + + + + Creates a new data representation instance of a .NET event invocation with the given sender and event data. + + The sender object that raised the event. + The event data that was generated by the event. + + + + Base class for historical schedulers, which are virtual time schedulers that use DateTimeOffset for absolute time and TimeSpan for relative time. + + + + + Base class for virtual time schedulers. + + Absolute time representation type. + Relative time representation type. + + + + Creates a new virtual time scheduler with the default value of TAbsolute as the initial clock value. + + + + + Creates a new virtual time scheduler with the specified initial clock value and absolute time comparer. + + Initial value for the clock. + Comparer to determine causality of events based on absolute time. + is null. + + + + Adds a relative time value to an absolute time value. + + Absolute time value. + Relative time value to add. + The resulting absolute time sum value. + + + + Converts the absolute time value to a DateTimeOffset value. + + Absolute time value to convert. + The corresponding DateTimeOffset value. + + + + Converts the TimeSpan value to a relative time value. + + TimeSpan value to convert. + The corresponding relative time value. + + + + Schedules an action to be executed at dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Absolute time at which to execute the action. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + + + + Schedules an action to be executed at dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Relative time after which to execute the action. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + + + + Schedules an action to be executed. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Schedules an action to be executed after dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Relative time after which to execute the action. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Schedules an action to be executed at dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Absolute time at which to execute the action. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Starts the virtual time scheduler. + + + + + Stops the virtual time scheduler. + + + + + Advances the scheduler's clock to the specified time, running all work till that point. + + Absolute time to advance the scheduler's clock to. + is in the past. + The scheduler is already running. VirtualTimeScheduler doesn't support running nested work dispatch loops. To simulate time slippage while running work on the scheduler, use . + + + + Advances the scheduler's clock by the specified relative time, running all work scheduled for that timespan. + + Relative time to advance the scheduler's clock by. + is negative. + The scheduler is already running. VirtualTimeScheduler doesn't support running nested work dispatch loops. To simulate time slippage while running work on the scheduler, use . + + + + Advances the scheduler's clock by the specified relative time. + + Relative time to advance the scheduler's clock by. + is negative. + + + + Gets the next scheduled item to be executed. + + The next scheduled item. + + + + Discovers scheduler services by interface type. The base class implementation supports + only the IStopwatchProvider service. To influence service discovery - such as adding + support for other scheduler services - derived types can override this method. + + Scheduler service interface type to discover. + Object implementing the requested service, if available; null otherwise. + + + + Starts a new stopwatch object. + + New stopwatch object; started at the time of the request. + + + + Gets whether the scheduler is enabled to run work. + + + + + Gets the comparer used to compare absolute time values. + + + + + Gets the scheduler's absolute time clock value. + + + + + Gets the scheduler's notion of current time. + + + + + Creates a new historical scheduler with the minimum value of DateTimeOffset as the initial clock value. + + + + + Creates a new historical scheduler with the specified initial clock value. + + Initial clock value. + + + + Creates a new historical scheduler with the specified initial clock value and absolute time comparer. + + Initial value for the clock. + Comparer to determine causality of events based on absolute time. + + + + Adds a relative time value to an absolute time value. + + Absolute time value. + Relative time value to add. + The resulting absolute time sum value. + + + + Converts the absolute time value to a DateTimeOffset value. + + Absolute time value to convert. + The corresponding DateTimeOffset value. + + + + Converts the TimeSpan value to a relative time value. + + TimeSpan value to convert. + The corresponding relative time value. + + + + Provides a virtual time scheduler that uses DateTimeOffset for absolute time and TimeSpan for relative time. + + + + + Creates a new historical scheduler with the minimum value of DateTimeOffset as the initial clock value. + + + + + Creates a new historical scheduler with the specified initial clock value. + + Initial value for the clock. + + + + Creates a new historical scheduler with the specified initial clock value. + + Initial value for the clock. + Comparer to determine causality of events based on absolute time. + is null. + + + + Gets the next scheduled item to be executed. + + The next scheduled item. + + + + Schedules an action to be executed at dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + Absolute time at which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Base class for virtual time schedulers using a priority queue for scheduled items. + + Absolute time representation type. + Relative time representation type. + + + + Creates a new virtual time scheduler with the default value of TAbsolute as the initial clock value. + + + + + Creates a new virtual time scheduler. + + Initial value for the clock. + Comparer to determine causality of events based on absolute time. + is null. + + + + Gets the next scheduled item to be executed. + + The next scheduled item. + + + + Schedules an action to be executed at dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + Absolute time at which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Represents an observable wrapper that can be connected and disconnected from its underlying observable sequence. + + The type of the elements in the source sequence. + The type of the elements in the resulting sequence, after transformation through the subject. + + + + Creates an observable that can be connected and disconnected from its source. + + Underlying observable source sequence that can be connected and disconnected from the wrapper. + Subject exposed by the connectable observable, receiving data from the underlying source sequence upon connection. + + + + Connects the observable wrapper to its source. All subscribed observers will receive values from the underlying observable sequence as long as the connection is established. + + Disposable object used to disconnect the observable wrapper from its source, causing subscribed observer to stop receiving values from the underlying observable sequence. + + + + Subscribes an observer to the observable sequence. No values from the underlying observable source will be received unless a connection was established through the Connect method. + + Observer that will receive values from the underlying observable source when the current ConnectableObservable instance is connected through a call to Connect. + Disposable used to unsubscribe from the observable sequence. + + + + Provides a set of static methods for creating subjects. + + + + + Creates a subject from the specified observer and observable. + + The type of the elements received by the observer. + The type of the elements produced by the observable sequence. + The observer used to send messages to the subject. + The observable used to subscribe to messages sent from the subject. + Subject implemented using the given observer and observable. + or is null. + + + + Synchronizes the messages sent to the subject. + + The type of the elements received by the subject. + The type of the elements produced by the subject. + The subject to synchronize. + Subject whose messages are synchronized. + is null. + + + + Synchronizes the messages sent to the subject and notifies observers on the specified scheduler. + + The type of the elements received by the subject. + The type of the elements produced by the subject. + The subject to synchronize. + Scheduler to notify observers on. + Subject whose messages are synchronized and whose observers are notified on the given scheduler. + or is null. + + + + Represents the result of an asynchronous operation. + The last value before the OnCompleted notification, or the error received through OnError, is sent to all subscribed observers. + + The type of the elements processed by the subject. + + + + Creates a subject that can only receive one value and that value is cached for all future observations. + + + + + Notifies all subscribed observers about the end of the sequence, also causing the last received value to be sent out (if any). + + + + + Notifies all subscribed observers about the exception. + + The exception to send to all observers. + is null. + + + + Sends a value to the subject. The last value received before successful termination will be sent to all subscribed and future observers. + + The value to store in the subject. + + + + Subscribes an observer to the subject. + + Observer to subscribe to the subject. + Disposable object that can be used to unsubscribe the observer from the subject. + is null. + + + + Unsubscribe all observers and release resources. + + + + + Gets an awaitable object for the current AsyncSubject. + + Object that can be awaited. + + + + Specifies a callback action that will be invoked when the subject completes. + + Callback action that will be invoked when the subject completes. + is null. + + + + Gets the last element of the subject, potentially blocking until the subject completes successfully or exceptionally. + + The last element of the subject. Throws an InvalidOperationException if no element was received. + The source sequence is empty. + + + + Indicates whether the subject has observers subscribed to it. + + + + + Gets whether the AsyncSubject has completed. + + + + + Represents a value that changes over time. + Observers can subscribe to the subject to receive the last (or initial) value and all subsequent notifications. + + The type of the elements processed by the subject. + + + + Initializes a new instance of the class which creates a subject that caches its last value and starts with the specified value. + + Initial value sent to observers when no other value has been received by the subject yet. + + + + Notifies all subscribed observers about the end of the sequence. + + + + + Notifies all subscribed observers about the exception. + + The exception to send to all observers. + is null. + + + + Notifies all subscribed observers about the arrival of the specified element in the sequence. + + The value to send to all observers. + + + + Subscribes an observer to the subject. + + Observer to subscribe to the subject. + Disposable object that can be used to unsubscribe the observer from the subject. + is null. + + + + Unsubscribe all observers and release resources. + + + + + Gets the current value or throws an exception. + + The initial value passed to the constructor until is called; after which, the last value passed to . + + is frozen after is called. + After is called, always throws the specified exception. + An exception is always thrown after is called. + + Reading is a thread-safe operation, though there's a potential race condition when or are being invoked concurrently. + In some cases, it may be necessary for a caller to use external synchronization to avoid race conditions. + + + Dispose was called. + + + + Indicates whether the subject has observers subscribed to it. + + + + + Represents an object that is both an observable sequence as well as an observer. + Each notification is broadcasted to all subscribed observers. + + The type of the elements processed by the subject. + + + + Creates a subject. + + + + + Notifies all subscribed observers about the end of the sequence. + + + + + Notifies all subscribed observers about the specified exception. + + The exception to send to all currently subscribed observers. + is null. + + + + Notifies all subscribed observers about the arrival of the specified element in the sequence. + + The value to send to all currently subscribed observers. + + + + Subscribes an observer to the subject. + + Observer to subscribe to the subject. + Disposable object that can be used to unsubscribe the observer from the subject. + is null. + + + + Releases all resources used by the current instance of the class and unsubscribes all observers. + + + + + Indicates whether the subject has observers subscribed to it. + + + + + Abstract base class for join patterns. + + + + + Represents a join pattern over one observable sequence. + + The type of the elements in the first source sequence. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over two observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + + + + Creates a pattern that matches when all three observable sequences have an available element. + + The type of the elements in the third observable sequence. + Observable sequence to match with the two previous sequences. + Pattern object that matches when all observable sequences have an available element. + is null. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over three observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + + + + Creates a pattern that matches when all four observable sequences have an available element. + + The type of the elements in the fourth observable sequence. + Observable sequence to match with the three previous sequences. + Pattern object that matches when all observable sequences have an available element. + is null. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over four observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + + + + Creates a pattern that matches when all five observable sequences have an available element. + + The type of the elements in the fifth observable sequence. + Observable sequence to match with the four previous sequences. + Pattern object that matches when all observable sequences have an available element. + is null. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over five observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + + + + Creates a pattern that matches when all six observable sequences have an available element. + + The type of the elements in the sixth observable sequence. + Observable sequence to match with the five previous sequences. + Pattern object that matches when all observable sequences have an available element. + is null. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over six observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + + + + Creates a pattern that matches when all seven observable sequences have an available element. + + The type of the elements in the seventh observable sequence. + Observable sequence to match with the six previous sequences. + Pattern object that matches when all observable sequences have an available element. + is null. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over seven observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + + + + Creates a pattern that matches when all eight observable sequences have an available element. + + The type of the elements in the eighth observable sequence. + Observable sequence to match with the seven previous sequences. + Pattern object that matches when all observable sequences have an available element. + is null. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over eight observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + + + + Creates a pattern that matches when all nine observable sequences have an available element. + + The type of the elements in the ninth observable sequence. + Observable sequence to match with the eight previous sequences. + Pattern object that matches when all observable sequences have an available element. + is null. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over nine observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + + + + Creates a pattern that matches when all ten observable sequences have an available element. + + The type of the elements in the tenth observable sequence. + Observable sequence to match with the nine previous sequences. + Pattern object that matches when all observable sequences have an available element. + is null. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over ten observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + + + + Creates a pattern that matches when all eleven observable sequences have an available element. + + The type of the elements in the eleventh observable sequence. + Observable sequence to match with the ten previous sequences. + Pattern object that matches when all observable sequences have an available element. + is null. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over eleven observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + + + + Creates a pattern that matches when all twelve observable sequences have an available element. + + The type of the elements in the twelfth observable sequence. + Observable sequence to match with the eleven previous sequences. + Pattern object that matches when all observable sequences have an available element. + is null. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over twelve observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + + + + Creates a pattern that matches when all thirteen observable sequences have an available element. + + The type of the elements in the thirteenth observable sequence. + Observable sequence to match with the twelve previous sequences. + Pattern object that matches when all observable sequences have an available element. + is null. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over thirteen observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + The type of the elements in the thirteenth source sequence. + + + + Creates a pattern that matches when all fourteen observable sequences have an available element. + + The type of the elements in the fourteenth observable sequence. + Observable sequence to match with the thirteen previous sequences. + Pattern object that matches when all observable sequences have an available element. + is null. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over fourteen observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + The type of the elements in the thirteenth source sequence. + The type of the elements in the fourteenth source sequence. + + + + Creates a pattern that matches when all fifteen observable sequences have an available element. + + The type of the elements in the fifteenth observable sequence. + Observable sequence to match with the fourteen previous sequences. + Pattern object that matches when all observable sequences have an available element. + is null. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over fifteen observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + The type of the elements in the thirteenth source sequence. + The type of the elements in the fourteenth source sequence. + The type of the elements in the fifteenth source sequence. + + + + Creates a pattern that matches when all sixteen observable sequences have an available element. + + The type of the elements in the sixteenth observable sequence. + Observable sequence to match with the fifteen previous sequences. + Pattern object that matches when all observable sequences have an available element. + is null. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents a join pattern over sixteen observable sequences. + + The type of the elements in the first source sequence. + The type of the elements in the second source sequence. + The type of the elements in the third source sequence. + The type of the elements in the fourth source sequence. + The type of the elements in the fifth source sequence. + The type of the elements in the sixth source sequence. + The type of the elements in the seventh source sequence. + The type of the elements in the eighth source sequence. + The type of the elements in the ninth source sequence. + The type of the elements in the tenth source sequence. + The type of the elements in the eleventh source sequence. + The type of the elements in the twelfth source sequence. + The type of the elements in the thirteenth source sequence. + The type of the elements in the fourteenth source sequence. + The type of the elements in the fifteenth source sequence. + The type of the elements in the sixteenth source sequence. + + + + Matches when all observable sequences have an available element and projects the elements by invoking the selector function. + + The type of the elements in the result sequence, returned by the selector function. + Selector that will be invoked for elements in the source sequences. + Plan that produces the projected results, to be fed (with other plans) to the When operator. + is null. + + + + Represents an execution plan for join patterns. + + The type of the results produced by the plan. + + + + Represents an object that is both an observable sequence as well as an observer. + Each notification is broadcasted to all subscribed and future observers, subject to buffer trimming policies. + + The type of the elements processed by the subject. + + + + Initializes a new instance of the class with the specified buffer size, window and scheduler. + + Maximum element count of the replay buffer. + Maximum time length of the replay buffer. + Scheduler the observers are invoked on. + is less than zero. -or- is less than TimeSpan.Zero. + is null. + + + + Initializes a new instance of the class with the specified buffer size and window. + + Maximum element count of the replay buffer. + Maximum time length of the replay buffer. + is less than zero. -or- is less than TimeSpan.Zero. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified scheduler. + + Scheduler the observers are invoked on. + is null. + + + + Initializes a new instance of the class with the specified buffer size and scheduler. + + Maximum element count of the replay buffer. + Scheduler the observers are invoked on. + is null. + is less than zero. + + + + Initializes a new instance of the class with the specified buffer size. + + Maximum element count of the replay buffer. + is less than zero. + + + + Initializes a new instance of the class with the specified window and scheduler. + + Maximum time length of the replay buffer. + Scheduler the observers are invoked on. + is null. + is less than TimeSpan.Zero. + + + + Initializes a new instance of the class with the specified window. + + Maximum time length of the replay buffer. + is less than TimeSpan.Zero. + + + + Notifies all subscribed and future observers about the arrival of the specified element in the sequence. + + The value to send to all observers. + + + + Notifies all subscribed and future observers about the specified exception. + + The exception to send to all observers. + is null. + + + + Notifies all subscribed and future observers about the end of the sequence. + + + + + Subscribes an observer to the subject. + + Observer to subscribe to the subject. + Disposable object that can be used to unsubscribe the observer from the subject. + is null. + + + + Releases all resources used by the current instance of the class and unsubscribe all observers. + + + + + Indicates whether the subject has observers subscribed to it. + + + + + The System.Reactive.Threading.Tasks namespace contains helpers for the conversion between tasks and observable sequences. + + + + + Provides a set of static methods for converting tasks to observable sequences. + + + + + Returns an observable sequence that signals when the task completes. + + Task to convert to an observable sequence. + An observable sequence that produces a unit value when the task completes, or propagates the exception produced by the task. + is null. + If the specified task object supports cancellation, consider using instead. + + + + Returns an observable sequence that propagates the result of the task. + + The type of the result produced by the task. + Task to convert to an observable sequence. + An observable sequence that produces the task's result, or propagates the exception produced by the task. + is null. + If the specified task object supports cancellation, consider using instead. + + + + Returns a task that will receive the last value or the exception produced by the observable sequence. + + The type of the elements in the source sequence. + Observable sequence to convert to a task. + A task that will receive the last element or the exception produced by the observable sequence. + is null. + + + + Returns a task that will receive the last value or the exception produced by the observable sequence. + + The type of the elements in the source sequence. + Observable sequence to convert to a task. + The state to use as the underlying task's AsyncState. + A task that will receive the last element or the exception produced by the observable sequence. + is null. + + + + Returns a task that will receive the last value or the exception produced by the observable sequence. + + The type of the elements in the source sequence. + Observable sequence to convert to a task. + Cancellation token that can be used to cancel the task, causing unsubscription from the observable sequence. + A task that will receive the last element or the exception produced by the observable sequence. + is null. + + + + Returns a task that will receive the last value or the exception produced by the observable sequence. + + The type of the elements in the source sequence. + Observable sequence to convert to a task. + Cancellation token that can be used to cancel the task, causing unsubscription from the observable sequence. + The state to use as the underlying task's AsyncState. + A task that will receive the last element or the exception produced by the observable sequence. + is null. + + + + Represents a value associated with time interval information. + The time interval can represent the time it took to produce the value, the interval relative to a previous value, the value's delivery time relative to a base, etc. + + The type of the value being annotated with time interval information. + + + + Constructs a time interval value. + + The value to be annotated with a time interval. + Time interval associated with the value. + + + + Determines whether the current TimeInterval<T> value has the same Value and Interval as a specified TimeInterval<T> value. + + An object to compare to the current TimeInterval<T> value. + true if both TimeInterval<T> values have the same Value and Interval; otherwise, false. + + + + Determines whether the two specified TimeInterval<T> values have the same Value and Interval. + + The first TimeInterval<T> value to compare. + The second TimeInterval<T> value to compare. + true if the first TimeInterval<T> value has the same Value and Interval as the second TimeInterval<T> value; otherwise, false. + + + + Determines whether the two specified TimeInterval<T> values don't have the same Value and Interval. + + The first TimeInterval<T> value to compare. + The second TimeInterval<T> value to compare. + true if the first TimeInterval<T> value has a different Value or Interval as the second TimeInterval<T> value; otherwise, false. + + + + Determines whether the specified System.Object is equal to the current TimeInterval<T>. + + The System.Object to compare with the current TimeInterval<T>. + true if the specified System.Object is equal to the current TimeInterval<T>; otherwise, false. + + + + Returns the hash code for the current TimeInterval<T> value. + + A hash code for the current TimeInterval<T> value. + + + + Returns a string representation of the current TimeInterval<T> value. + + String representation of the current TimeInterval<T> value. + + + + Gets the value. + + + + + Gets the interval. + + + + + Represents value with a timestamp on it. + The timestamp typically represents the time the value was received, using an IScheduler's clock to obtain the current time. + + The type of the value being timestamped. + + + + Constructs a timestamped value. + + The value to be annotated with a timestamp. + Timestamp associated with the value. + + + + Determines whether the current Timestamped<T> value has the same Value and Timestamp as a specified Timestamped<T> value. + + An object to compare to the current Timestamped<T> value. + true if both Timestamped<T> values have the same Value and Timestamp; otherwise, false. + + + + Determines whether the two specified Timestamped<T> values have the same Value and Timestamp. + + The first Timestamped<T> value to compare. + The second Timestamped<T> value to compare. + true if the first Timestamped<T> value has the same Value and Timestamp as the second Timestamped<T> value; otherwise, false. + + + + Determines whether the two specified Timestamped<T> values don't have the same Value and Timestamp. + + The first Timestamped<T> value to compare. + The second Timestamped<T> value to compare. + true if the first Timestamped<T> value has a different Value or Timestamp as the second Timestamped<T> value; otherwise, false. + + + + Determines whether the specified System.Object is equal to the current Timestamped<T>. + + The System.Object to compare with the current Timestamped<T>. + true if the specified System.Object is equal to the current Timestamped<T>; otherwise, false. + + + + Returns the hash code for the current Timestamped<T> value. + + A hash code for the current Timestamped<T> value. + + + + Returns a string representation of the current Timestamped<T> value. + + String representation of the current Timestamped<T> value. + + + + Gets the value. + + + + + Gets the timestamp. + + + + + A helper class with a factory method for creating Timestamped<T> instances. + + + + + Creates an instance of a Timestamped<T>. This is syntactic sugar that uses type inference + to avoid specifying a type in a constructor call, which is very useful when using anonymous types. + + The value to be annotated with a timestamp. + Timestamp associated with the value. + Creates a new timestamped value. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Could not find event '{0}' on object of type '{1}'.. + + + + + Looks up a localized string similar to Could not find event '{0}' on type '{1}'.. + + + + + Looks up a localized string similar to Add method should take 1 parameter.. + + + + + Looks up a localized string similar to The second parameter of the event delegate must be assignable to '{0}'.. + + + + + Looks up a localized string similar to Event is missing the add method.. + + + + + Looks up a localized string similar to Event is missing the remove method.. + + + + + Looks up a localized string similar to The event delegate must have a void return type.. + + + + + Looks up a localized string similar to The event delegate must have exactly two parameters.. + + + + + Looks up a localized string similar to Remove method should take 1 parameter.. + + + + + Looks up a localized string similar to The first parameter of the event delegate must be assignable to '{0}'.. + + + + + Looks up a localized string similar to Remove method of a WinRT event should take an EventRegistrationToken.. + + + + + Looks up a localized string similar to Sequence contains more than one element.. + + + + + Looks up a localized string similar to Sequence contains more than one matching element.. + + + + + Looks up a localized string similar to Sequence contains no elements.. + + + + + Looks up a localized string similar to Sequence contains no matching element.. + + + + + Looks up a localized string similar to {0} cannot be called when the scheduler is already running. Try using Sleep instead.. + + + + diff --git a/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Linq.dll b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Linq.dll new file mode 100644 index 0000000000000000000000000000000000000000..c5069f936ab49fdfa22f4de1c0e26109e634f3ec GIT binary patch literal 708816 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 + Represents an object that schedules units of work on a designated thread. + + + + + Counter for diagnostic purposes, to name the threads. + + + + + Thread factory function. + + + + + Stopwatch for timing free of absolute time dependencies. + + + + + Thread used by the event loop to run work items on. No work should be run on any other thread. + If ExitIfEmpty is set, the thread can quit and a new thread will be created when new work is scheduled. + + + + + Gate to protect data structures, including the work queue and the ready list. + + + + + Semaphore to count requests to re-evaluate the queue, from either Schedule requests or when a timer + expires and moves on to the next item in the queue. + + + + + Queue holding work items. Protected by the gate. + + + + + Queue holding items that are ready to be run as soon as possible. Protected by the gate. + + + + + Work item that will be scheduled next. Used upon reevaluation of the queue to check whether the next + item is still the same. If not, a new timer needs to be started (see below). + + + + + Disposable that always holds the timer to dispatch the first element in the queue. + + + + + Flag indicating whether the event loop should quit. When set, the event should be signaled as well to + wake up the event loop thread, which will subsequently abandon all work. + + + + + Creates an object that schedules units of work on a designated thread. + + + + + Creates an object that schedules units of work on a designated thread, using the specified factory to control thread creation options. + + Factory function for thread creation. + is null. + + + + Schedules an action to be executed after dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + Relative time after which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + is null. + The scheduler has been disposed and doesn't accept new work. + + + + Schedules a periodic piece of work on the designated thread. + + The type of the state passed to the scheduled action. + Initial state passed to the action upon the first iteration. + Period for running the work periodically. + Action to be executed, potentially updating the state. + The disposable object used to cancel the scheduled recurring action (best effort). + is null. + is less than TimeSpan.Zero. + The scheduler has been disposed and doesn't accept new work. + + + + Starts a new stopwatch object. + + New stopwatch object; started at the time of the request. + + + + Ends the thread associated with this scheduler. All remaining work in the scheduler queue is abandoned. + + + + + Ensures there is an event loop thread running. Should be called under the gate. + + + + + Event loop scheduled on the designated event loop thread. The loop is suspended/resumed using the event + which gets set by calls to Schedule, the next item timer, or calls to Dispose. + + + + + Indicates whether the event loop thread is allowed to quit when no work is left. If new work + is scheduled afterwards, a new event loop thread is created. This property is used by the + NewThreadScheduler which uses an event loop for its recursive invocations. + + + + + Represents an object that schedules each unit of work on a separate thread. + + + + + Creates an object that schedules each unit of work on a separate thread. + + + + + Creates an object that schedules each unit of work on a separate thread. + + Factory function for thread creation. + is null. + + + + Schedules an action to be executed after dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + Relative time after which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Schedules a long-running task by creating a new thread. Cancellation happens through polling. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Schedules a periodic piece of work by creating a new thread that goes to sleep when work has been dispatched and wakes up again at the next periodic due time. + + The type of the state passed to the scheduled action. + Initial state passed to the action upon the first iteration. + Period for running the work periodically. + Action to be executed, potentially updating the state. + The disposable object used to cancel the scheduled recurring action (best effort). + is null. + is less than TimeSpan.Zero. + + + + Starts a new stopwatch object. + + New stopwatch object; started at the time of the request. + + + + Gets an instance of this scheduler that uses the default Thread constructor. + + + + + Provides access to the platform enlightenments used by other Rx libraries to improve system performance and + runtime efficiency. While Rx can run without platform enlightenments loaded, it's recommended to deploy the + System.Reactive.PlatformServices assembly with your application and call during application startup to ensure enlightenments are properly loaded. + + + + + Ensures that the calling assembly has a reference to the System.Reactive.PlatformServices assembly with + platform enlightenments. If no reference is made from the user code, it's possible for the build process + to drop the deployment of System.Reactive.PlatformServices, preventing its runtime discovery. + + + true if the loaded enlightenment provider matches the provided defined in the current assembly; false + otherwise. When a custom enlightenment provider is installed by the host, false will be returned. + + + + + Represents an object that schedules units of work on the Task Parallel Library (TPL) task pool. + + Instance of this type using the default TaskScheduler to schedule work on the TPL task pool. + + + + Creates an object that schedules units of work using the provided TaskFactory. + + Task factory used to create tasks to run units of work. + is null. + + + + Schedules an action to be executed. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Schedules an action to be executed after dueTime. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + Relative time after which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Schedules a long-running task by creating a new task using TaskCreationOptions.LongRunning. Cancellation happens through polling. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Gets a new stopwatch ob ject. + + New stopwatch object; started at the time of the request. + + + + Schedules a periodic piece of work by running a platform-specific timer to create tasks periodically. + + The type of the state passed to the scheduled action. + Initial state passed to the action upon the first iteration. + Period for running the work periodically. + Action to be executed, potentially updating the state. + The disposable object used to cancel the scheduled recurring action (best effort). + is null. + is less than TimeSpan.Zero. + + + + Gets an instance of this scheduler that uses the default TaskScheduler. + + + + + Represents an object that schedules units of work on the CLR thread pool. + + Singleton instance of this type exposed through this static property. + + + + Schedules an action to be executed. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Schedules an action to be executed after dueTime, using a System.Threading.Timer object. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + Relative time after which to execute the action. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Schedules a long-running task by creating a new thread. Cancellation happens through polling. + + The type of the state passed to the scheduled action. + State passed to the action to be executed. + Action to be executed. + The disposable object used to cancel the scheduled action (best effort). + is null. + + + + Starts a new stopwatch object. + + New stopwatch object; started at the time of the request. + + + + Schedules a periodic piece of work, using a System.Threading.Timer object. + + The type of the state passed to the scheduled action. + Initial state passed to the action upon the first iteration. + Period for running the work periodically. + Action to be executed, potentially updating the state. + The disposable object used to cancel the scheduled recurring action (best effort). + is null. + is less than or equal to zero. + + + + Gets the singleton instance of the CLR thread pool scheduler. + + + + + (Infrastructure) Provider for platform-specific framework enlightenments. + + + + + (Infastructure) Tries to gets the specified service. + + Service type. + Optional set of arguments. + Service instance or null if not found. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to The WinRT thread pool doesn't support creating periodic timers with a period below 1 millisecond.. + + + + diff --git a/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.PlatformServices.dll b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.PlatformServices.dll new file mode 100644 index 0000000000000000000000000000000000000000..541cb2e3956bad914065e2ff69be7e7c560c7d96 GIT binary patch literal 38600 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 - ..\..\..\..\..\..\Program Files\ArcGIS\Pro\bin\ArcGIS.Core.dll + C:\Program Files\ArcGIS\Pro\bin\ArcGIS.Core.dll True False - ..\..\..\..\..\..\Program Files\ArcGIS\Pro\bin\ArcGIS.CoreHost.dll + C:\Program Files\ArcGIS\Pro\bin\ArcGIS.CoreHost.dll True - ..\..\..\..\..\..\Program Files\ArcGIS\Pro\bin\Extensions\Catalog\ArcGIS.Desktop.Catalog.dll + C:\Program Files\ArcGIS\Pro\bin\Extensions\Catalog\ArcGIS.Desktop.Catalog.dll True - ..\..\..\..\..\..\Program Files\ArcGIS\Pro\bin\Extensions\Core\ArcGIS.Desktop.Core.dll + C:\Program Files\ArcGIS\Pro\bin\Extensions\Core\ArcGIS.Desktop.Core.dll True - ..\..\..\..\..\..\Program Files\ArcGIS\Pro\bin\Extensions\Editing\ArcGIS.Desktop.Editing.dll + C:\Program Files\ArcGIS\Pro\bin\Extensions\Editing\ArcGIS.Desktop.Editing.dll True - ..\..\..\..\..\..\Program Files\ArcGIS\Pro\bin\Extensions\DesktopExtensions\ArcGIS.Desktop.Extensions.dll + C:\Program Files\ArcGIS\Pro\bin\Extensions\DesktopExtensions\ArcGIS.Desktop.Extensions.dll True - ..\..\..\..\..\..\Program Files\ArcGIS\Pro\bin\ArcGIS.Desktop.Framework.dll + C:\Program Files\ArcGIS\Pro\bin\ArcGIS.Desktop.Framework.dll True - ..\..\..\..\..\..\Program Files\ArcGIS\Pro\bin\Extensions\Mapping\ArcGIS.Desktop.Mapping.dll + C:\Program Files\ArcGIS\Pro\bin\Extensions\Mapping\ArcGIS.Desktop.Mapping.dll True - ..\..\..\..\..\..\Program Files\ArcGIS\Pro\bin\ESRI.ArcGIS.ItemIndex.dll + C:\Program Files\ArcGIS\Pro\bin\ESRI.ArcGIS.ItemIndex.dll diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule.csproj b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule.csproj index 36dfedd3..4bf148f2 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule.csproj +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule.csproj @@ -44,20 +44,20 @@ - ..\..\packages\Rx-Core.2.2.5\lib\net45\System.Reactive.Core.dll - True + False + ..\..\Dependencies\ReactiveExtensions\net45\System.Reactive.Core.dll - ..\..\packages\Rx-Interfaces.2.2.5\lib\net45\System.Reactive.Interfaces.dll - True + False + ..\..\Dependencies\ReactiveExtensions\net45\System.Reactive.Interfaces.dll - ..\..\packages\Rx-Linq.2.2.5\lib\net45\System.Reactive.Linq.dll - True + False + ..\..\Dependencies\ReactiveExtensions\net45\System.Reactive.Linq.dll - ..\..\packages\Rx-PlatformServices.2.2.5\lib\net45\System.Reactive.PlatformServices.dll - True + False + ..\..\Dependencies\ReactiveExtensions\net45\System.Reactive.PlatformServices.dll @@ -159,9 +159,6 @@ - - - @@ -187,11 +184,4 @@ - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - \ No newline at end of file diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/packages.config b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/packages.config deleted file mode 100644 index 571e4fe0..00000000 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file From 5a4137038b254ca1f7bfd8ea05128201d13fceee Mon Sep 17 00:00:00 2001 From: Thargoids Date: Mon, 30 Jan 2017 11:34:41 +0000 Subject: [PATCH 07/96] Adds wireup to capture Escape key press #49 --- .../Helpers/Constants.cs | 1 + .../ProAppDistanceAndDirectionModule/SketchTool.cs | 11 +++++++++++ .../ViewModels/ProTabBaseViewModel.cs | 14 ++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Helpers/Constants.cs b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Helpers/Constants.cs index 8cc0e560..0e9df637 100644 --- a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Helpers/Constants.cs +++ b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Helpers/Constants.cs @@ -23,5 +23,6 @@ public class Constants public const string MOUSE_MOVE_POINT = "MOUSE_MOVE_POINT"; public const string TAB_ITEM_SELECTED = "TAB_ITEM_SELECTED"; public const string MOUSE_DOUBLE_CLICK = "MOUSE_DOUBLE_CLICK"; + public const string KEYPRESS_ESCAPE = "KEYPRESS_ESCAPE"; } } diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/SketchTool.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/SketchTool.cs index 1be371a9..f1c6b8ba 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/SketchTool.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/SketchTool.cs @@ -20,6 +20,7 @@ using DistanceAndDirectionLibrary.Helpers; using ArcGIS.Desktop.Framework.Threading.Tasks; using System.Reactive.Subjects; +using System.Windows.Input; namespace ProAppDistanceAndDirectionModule { @@ -48,6 +49,16 @@ public SketchTool() } Subject mouseSubject = new Subject(); + // If the user presses Escape cancel the sketch + protected override void OnToolKeyDown(MapViewKeyEventArgs k) + { + if (k.Key == Key.Escape) + { + k.Handled = true; + Mediator.NotifyColleagues(DistanceAndDirectionLibrary.Constants.KEYPRESS_ESCAPE, null); + } + } + protected override Task OnSketchCompleteAsync(Geometry geometry) { try diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs index 352f32a4..6ed52fbe 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs @@ -54,6 +54,7 @@ public ProTabBaseViewModel() Mediator.Register(DistanceAndDirectionLibrary.Constants.NEW_MAP_POINT, OnNewMapPointEvent); Mediator.Register(DistanceAndDirectionLibrary.Constants.MOUSE_MOVE_POINT, OnMouseMoveEvent); Mediator.Register(DistanceAndDirectionLibrary.Constants.TAB_ITEM_SELECTED, OnTabItemSelected); + Mediator.Register(DistanceAndDirectionLibrary.Constants.KEYPRESS_ESCAPE, OnKeypressEscape); // Get Current tool CurrentTool = FrameworkApplication.CurrentTool; @@ -789,6 +790,19 @@ private void OnTabItemSelected(object obj) IsActiveTab = (obj == this); } + /// + /// Handler for the escape key press event + /// Helps cancel operation when escape key is pressed + /// + /// always null + private void OnKeypressEscape(object obj) + { + if (FrameworkApplication.CurrentTool != null) + { + Reset(true); + } + } + internal double ConvertFromTo(DistanceTypes fromType, DistanceTypes toType, double input) { double result = 0.0; From e4ffb6dce3e3c76b00349ade561a23d3b593f1bd Mon Sep 17 00:00:00 2001 From: Thargoids Date: Wed, 1 Feb 2017 11:36:11 +0000 Subject: [PATCH 08/96] Backup --- .../Models/FeatureClassUtils.cs | 72 ++++++++++++++++++ .../Models/Graphic.cs | 5 +- .../ProAppDistanceAndDirectionModule.csproj | 1 + .../ViewModels/ProCircleViewModel.cs | 10 ++- .../ViewModels/ProEllipseViewModel.cs | 10 ++- .../ViewModels/ProGraphicAttributes.cs | 75 +++++++++++++++++++ .../ViewModels/ProLinesViewModel.cs | 8 +- .../ViewModels/ProRangeViewModel.cs | 13 ++-- .../ViewModels/ProTabBaseViewModel.cs | 17 +++-- 9 files changed, 189 insertions(+), 22 deletions(-) create mode 100644 source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProGraphicAttributes.cs diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs index 15c9cde9..84803446 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs @@ -155,9 +155,39 @@ await QueuedTask.Run(() => pb.HasZ = false; rowBuffer[shapeIndex] = pb.ToGeometry(); isLine = true; + + // Add attributes + rowBuffer[definition.FindField("Distance")] = (((LineAttributes)graphic.p).GetAttributes()).Item3; + rowBuffer[definition.FindField("Angle")] = (((LineAttributes)graphic.p).GetAttributes()).Item4; } else if (graphic.Geometry is Polygon) rowBuffer[shapeIndex] = new PolygonBuilder(graphic.Geometry as Polygon).ToGeometry(); + + // Add attributes + string graphicsType = graphic.p.GetType().ToString().Replace("ProAppDistanceAndDirectionModule.", ""); + switch (graphicsType) + { + case "CircleAttributes": + { + rowBuffer[definition.FindField("Distance")] = (((CircleAttributes)graphic.p).GetAttributes()).Item2; + rowBuffer[definition.FindField("DistanceType")] = (((CircleAttributes)graphic.p).GetAttributes()).Item3; + break; + } + case "EllipseAttributes": + { + rowBuffer[definition.FindField("Minor")] = (((EllipseAttributes)graphic.p).GetAttributes()).Item2; + rowBuffer[definition.FindField("Major")] = (((EllipseAttributes)graphic.p).GetAttributes()).Item3; + rowBuffer[definition.FindField("Orient")] = (((EllipseAttributes)graphic.p).GetAttributes()).Item4; + break; + } + case "RangeAttributes": + { + rowBuffer[definition.FindField("Rings")] = (((RangeAttributes)graphic.p).GetAttributes()).Item2; + rowBuffer[definition.FindField("Distance")] = (((RangeAttributes)graphic.p).GetAttributes()).Item3; + rowBuffer[definition.FindField("Radials")] = (((RangeAttributes)graphic.p).GetAttributes()).Item4; + break; + } + } Row row = table.CreateRow(rowBuffer); } @@ -194,6 +224,15 @@ await QueuedTask.Run(() => } } + private static IReadOnlyList makeValueArray (string featureClass, string fieldName, string fieldType) + { + List arguments = new List(); + arguments.Add(featureClass); + arguments.Add(fieldName); + arguments.Add(fieldType); + return Geoprocessing.MakeValueArray(arguments.ToArray()); + } + /// /// Create a feature class /// @@ -234,6 +273,39 @@ private static async Task CreateFeatureClass(string dataset, GeomType geomType, var valueArray = Geoprocessing.MakeValueArray(arguments.ToArray()); IGPResult result = await Geoprocessing.ExecuteToolAsync("CreateFeatureclass_management", valueArray); + // Add additional fields based on type of graphic + string featureClass = connection + "/" + dataset; + string graphicsType = graphicsList[0].p.GetType().ToString().Replace("ProAppDistanceAndDirectionModule.", ""); + switch (graphicsType) + { + case "LineAttributes": + { + IGPResult result2 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Distance", "DOUBLE")); + IGPResult result3 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Angle", "DOUBLE")); + break; + } + case "CircleAttributes": + { + IGPResult result2 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Distance", "DOUBLE")); + IGPResult result3 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "DistanceType", "TEXT")); + break; + } + case "EllipseAttributes": + { + IGPResult result2 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Minor", "DOUBLE")); + IGPResult result3 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Major", "DOUBLE")); + IGPResult result4 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Orient", "DOUBLE")); + break; + } + case "RangeAttributes": + { + IGPResult result2 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Rings", "SHORT")); + IGPResult result3 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Distance", "DOUBLE")); + IGPResult result4 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Radials", "SHORT")); + break; + } + } + await CreateFeatures(graphicsList); if (isKML) diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/Graphic.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/Graphic.cs index 8f607e57..1b5dedba 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/Graphic.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/Graphic.cs @@ -25,7 +25,7 @@ namespace ProAppDistanceAndDirectionModule.Models { public class Graphic { - public Graphic(GraphicTypes _graphicType, IDisposable _disposable, Geometry _geometry, ProTabBaseViewModel _viewModel, bool _isTemp = false) + public Graphic(GraphicTypes _graphicType, IDisposable _disposable, Geometry _geometry, ProTabBaseViewModel _viewModel, ProGraphicAttributes _p, bool _isTemp = false) { GraphicType = _graphicType; //UniqueId = _uniqueid; @@ -33,8 +33,11 @@ public Graphic(GraphicTypes _graphicType, IDisposable _disposable, Geometry _geo Geometry = _geometry; IsTemp = _isTemp; ViewModel = _viewModel; + p = _p; } + public ProGraphicAttributes p {get; set;} + // properties /// diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule.csproj b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule.csproj index 36dfedd3..0fcd04de 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule.csproj +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule.csproj @@ -115,6 +115,7 @@ + diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProCircleViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProCircleViewModel.cs index 62434293..0fda1651 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProCircleViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProCircleViewModel.cs @@ -320,7 +320,7 @@ public bool IsDistanceCalcExpanded ClearTempGraphics(); if (HasPoint1) - AddGraphicToMap(Point1, ColorFactory.GreenRGB, true, 5.0); + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); RaisePropertyChanged(() => IsDistanceCalcExpanded); } @@ -528,9 +528,13 @@ private Geometry CreateCircle(bool isFeedback) { color = ColorFactory.GreyRGB; ClearTempGraphics(); - AddGraphicToMap(Point1, ColorFactory.GreenRGB, true, 5.0); + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); } - AddGraphicToMap(geom, color, IsTempGraphic: isFeedback); + + // Hold onto the attributes in case user saves graphics to file later + CircleAttributes circleAttributes = new CircleAttributes(Point1, Distance, CircleType); + + AddGraphicToMap(geom, color, (ProGraphicAttributes)circleAttributes, IsTempGraphic: isFeedback); return geom as Geometry; } diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProEllipseViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProEllipseViewModel.cs index 453ae503..23759a3f 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProEllipseViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProEllipseViewModel.cs @@ -356,8 +356,12 @@ private void UpdateFeedbackWithEllipse(bool HasMinorAxis = true) var geom = GeometryEngine.GeodesicEllipse(param, MapView.Active.Map.SpatialReference); ClearTempGraphics(); - AddGraphicToMap(Point1, ColorFactory.GreenRGB, true, 5.0); - AddGraphicToMap(geom, ColorFactory.GreyRGB, true); + + // Hold onto the attributes in case user saves graphics to file later + EllipseAttributes ellipseAttributes = new EllipseAttributes(Point1, minorAxis, majorAxisDistance, param.AxisDirection); + + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); + AddGraphicToMap(geom, ColorFactory.GreyRGB, null, true); } catch(Exception ex) { @@ -385,7 +389,7 @@ internal override void OnNewMapPointEvent(object obj) Point1 = point; HasPoint1 = true; Point1Formatted = string.Empty; - AddGraphicToMap(Point1, ColorFactory.GreenRGB, true, 5.0); + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); } else if (!HasPoint2) diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProGraphicAttributes.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProGraphicAttributes.cs new file mode 100644 index 00000000..d188a854 --- /dev/null +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProGraphicAttributes.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ArcGIS.Core.Geometry; +using DistanceAndDirectionLibrary; + +namespace ProAppDistanceAndDirectionModule +{ + public class ProGraphicAttributes + { + } + + public class LineAttributes : ProGraphicAttributes + { + Tuple attributes; + + public LineAttributes(MapPoint startPt, MapPoint endPt, double distance, double angle) + { + attributes = new Tuple(startPt, endPt, distance, angle); + } + + public Tuple GetAttributes() + { + return attributes; + } + } + + public class CircleAttributes : ProGraphicAttributes + { + Tuple attributes; + + public CircleAttributes(MapPoint centerPt, double distance, CircleFromTypes circleFromTypes) + { + attributes = new Tuple(centerPt, distance, circleFromTypes); + } + + public Tuple GetAttributes() + { + return attributes; + } + } + + public class EllipseAttributes : ProGraphicAttributes + { + Tuple attributes; + + public EllipseAttributes(MapPoint centerPt, double minorX, double majorX, double orientX) + { + attributes = new Tuple(centerPt, minorX, majorX, orientX); + } + + public Tuple GetAttributes() + { + return attributes; + } + } + + public class RangeAttributes : ProGraphicAttributes + { + Tuple attributes; + + public RangeAttributes(MapPoint centerPt, int rings, double distance, int radials) + { + attributes = new Tuple(centerPt, rings, distance, radials); + } + + public Tuple GetAttributes() + { + return attributes; + } + } + +} diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProLinesViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProLinesViewModel.cs index f4e03349..8e2893d9 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProLinesViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProLinesViewModel.cs @@ -342,7 +342,7 @@ internal async override void OnNewMapPointEvent(object obj) ClearTempGraphics(); Point1 = point; HasPoint1 = true; - await AddGraphicToMap(Point1, ColorFactory.GreenRGB, true, 5.0); + await AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); return; } @@ -394,7 +394,11 @@ private Geometry CreatePolyline() return PolylineBuilder.CreatePolyline(segment); }).Result; Geometry newline = GeometryEngine.GeodeticDensifyByLength(polyline, 0, lu, curveType); - AddGraphicToMap(newline); + + // Hold onto the attributes in case user saves graphics to file later + LineAttributes lineAttributes = new LineAttributes(Point1, Point2, distance, (double)azimuth); + + AddGraphicToMap(newline, (ProGraphicAttributes)lineAttributes); ResetPoints(); return newline as Geometry; diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs index 365dfb00..1af374f4 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs @@ -244,7 +244,10 @@ private Geometry DrawRings() geom = GeometryEngine.GeodesicEllipse(param, MapView.Active.Map.SpatialReference); - AddGraphicToMap(geom); + // Hold onto the attributes in case user saves graphics to file later + RangeAttributes rangeAttributes = new RangeAttributes(Point1, numberOfRings, radius, numberOfRadials); + + AddGraphicToMap(geom, rangeAttributes); } return geom; @@ -277,7 +280,7 @@ internal override void OnNewMapPointEvent(object obj) HasPoint1 = true; ClearTempGraphics(); - AddGraphicToMap(Point1, ColorFactory.GreenRGB, true, 5.0); + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); // Reset formatted string Point1Formatted = string.Empty; @@ -291,7 +294,7 @@ internal override void OnNewMapPointEvent(object obj) HasPoint1 = true; ClearTempGraphics(); - AddGraphicToMap(Point1, ColorFactory.GreenRGB, true, 5.0); + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); // Reset formatted string Point1Formatted = string.Empty; @@ -395,8 +398,8 @@ private void UpdateFeedbackWithGeoCircle() var geom = GeometryEngine.GeodesicEllipse(param, MapView.Active.Map.SpatialReference); ClearTempGraphics(); - AddGraphicToMap(Point1, ColorFactory.GreenRGB, true, 5.0); - AddGraphicToMap(geom, ColorFactory.GreyRGB, true); + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); + AddGraphicToMap(geom, ColorFactory.GreyRGB, null, true); } } } diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs index 352f32a4..fd34bb0f 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs @@ -30,6 +30,7 @@ using DistanceAndDirectionLibrary; using ProAppDistanceAndDirectionModule.Models; using ProAppDistanceAndDirectionModule.Views; +using ProAppDistanceAndDirectionModule.ViewModels; namespace ProAppDistanceAndDirectionModule.ViewModels { @@ -262,7 +263,7 @@ public string Point1Formatted HasPoint1 = true; Point1 = point; - AddGraphicToMap(Point1, ColorFactory.GreenRGB, true, 5.0); + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); if (Point2 != null) { @@ -429,12 +430,12 @@ public virtual bool CanCreateElement #endregion - internal async void AddGraphicToMap(Geometry geom, bool IsTempGraphic = false, double size = 1.0) + internal async void AddGraphicToMap(Geometry geom, ProGraphicAttributes p = null, bool IsTempGraphic = false, double size = 1.0) { // default color Red - await AddGraphicToMap(geom, ColorFactory.RedRGB, IsTempGraphic, size); + await AddGraphicToMap(geom, ColorFactory.RedRGB, p, IsTempGraphic, size); } - internal async Task AddGraphicToMap(Geometry geom, CIMColor color, bool IsTempGraphic = false, double size = 1.0) + internal async Task AddGraphicToMap(Geometry geom, CIMColor color, ProGraphicAttributes p = null, bool IsTempGraphic = false, double size = 1.0) { if (geom == null || MapView.Active == null) return; @@ -474,7 +475,7 @@ await QueuedTask.Run(() => var gt = GetGraphicType(); - GraphicsList.Add(new Graphic(gt, disposable, geom, this, IsTempGraphic)); + GraphicsList.Add(new Graphic(gt, disposable, geom, this, p, IsTempGraphic)); RaisePropertyChanged(() => HasMapGraphics); }); @@ -611,7 +612,7 @@ internal virtual void OnNewMapPointEvent(object obj) HasPoint1 = true; Point1Formatted = string.Empty; - AddGraphicToMap(Point1, ColorFactory.GreenRGB, true, 5.0); + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); // lets try feedback //CreateFeedback(point, av); @@ -864,8 +865,8 @@ internal async Task UpdateFeedbackWithGeoLine(LineSegment segment, CurveType typ ClearTempGraphics(); Geometry newline = GeometryEngine.GeodeticDensifyByLength(polyline, 0, lu, type); - await AddGraphicToMap(Point1, ColorFactory.GreenRGB, true, 5.0); - await AddGraphicToMap(newline, ColorFactory.GreyRGB, true); + await AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); + await AddGraphicToMap(newline, ColorFactory.GreyRGB, null, true); } From 5169adb019cb59c6b7ca228b626221f76a040dc3 Mon Sep 17 00:00:00 2001 From: Thargoids Date: Thu, 2 Feb 2017 13:04:13 +0000 Subject: [PATCH 09/96] Labels now created for Esri formats on save as --- .../Models/FeatureClassUtils.cs | 151 +++++++++++------- .../ViewModels/ProEllipseViewModel.cs | 9 +- .../ViewModels/ProRangeViewModel.cs | 17 +- 3 files changed, 110 insertions(+), 67 deletions(-) diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs index 84803446..213ceb19 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs @@ -126,7 +126,7 @@ await QueuedTask.Run(async () => /// /// List of graphics to add to table /// - private static async Task CreateFeatures(List graphicsList) + private static async Task CreateFeatures(List graphicsList, bool isKML) { RowBuffer rowBuffer = null; bool isLine = false; @@ -144,7 +144,8 @@ await QueuedTask.Run(() => { TableDefinition definition = table.GetDefinition(); int shapeIndex = definition.FindField("Shape"); - + + string graphicsType; foreach (Graphic graphic in graphicsList) { rowBuffer = table.CreateRowBuffer(); @@ -156,38 +157,65 @@ await QueuedTask.Run(() => rowBuffer[shapeIndex] = pb.ToGeometry(); isLine = true; - // Add attributes - rowBuffer[definition.FindField("Distance")] = (((LineAttributes)graphic.p).GetAttributes()).Item3; - rowBuffer[definition.FindField("Angle")] = (((LineAttributes)graphic.p).GetAttributes()).Item4; + // Only add attributes for Esri format + if (!isKML) + { + // Add attributes + graphicsType = graphic.p.GetType().ToString().Replace("ProAppDistanceAndDirectionModule.", ""); + switch (graphicsType) + { + case "LineAttributes": + { + // Add attributes + rowBuffer[definition.FindField("Distance")] = (((LineAttributes)graphic.p).GetAttributes()).Item3; + rowBuffer[definition.FindField("Angle")] = (((LineAttributes)graphic.p).GetAttributes()).Item4; + break; + } + case "RangeAttributes": + { + rowBuffer[definition.FindField("Rings")] = (((RangeAttributes)graphic.p).GetAttributes()).Item2; + rowBuffer[definition.FindField("Distance")] = (((RangeAttributes)graphic.p).GetAttributes()).Item3; + rowBuffer[definition.FindField("Radials")] = (((RangeAttributes)graphic.p).GetAttributes()).Item4; + break; + } + } + } } else if (graphic.Geometry is Polygon) + { rowBuffer[shapeIndex] = new PolygonBuilder(graphic.Geometry as Polygon).ToGeometry(); - - // Add attributes - string graphicsType = graphic.p.GetType().ToString().Replace("ProAppDistanceAndDirectionModule.", ""); - switch (graphicsType) + + // Only add attributes for Esri format + if (!isKML) { - case "CircleAttributes": - { - rowBuffer[definition.FindField("Distance")] = (((CircleAttributes)graphic.p).GetAttributes()).Item2; - rowBuffer[definition.FindField("DistanceType")] = (((CircleAttributes)graphic.p).GetAttributes()).Item3; - break; - } - case "EllipseAttributes": - { - rowBuffer[definition.FindField("Minor")] = (((EllipseAttributes)graphic.p).GetAttributes()).Item2; - rowBuffer[definition.FindField("Major")] = (((EllipseAttributes)graphic.p).GetAttributes()).Item3; - rowBuffer[definition.FindField("Orient")] = (((EllipseAttributes)graphic.p).GetAttributes()).Item4; - break; - } - case "RangeAttributes": - { - rowBuffer[definition.FindField("Rings")] = (((RangeAttributes)graphic.p).GetAttributes()).Item2; - rowBuffer[definition.FindField("Distance")] = (((RangeAttributes)graphic.p).GetAttributes()).Item3; - rowBuffer[definition.FindField("Radials")] = (((RangeAttributes)graphic.p).GetAttributes()).Item4; - break; - } + // Add attributes + graphicsType = graphic.p.GetType().ToString().Replace("ProAppDistanceAndDirectionModule.", ""); + switch (graphicsType) + { + case "CircleAttributes": + { + rowBuffer[definition.FindField("Distance")] = (((CircleAttributes)graphic.p).GetAttributes()).Item2; + + string circleType = "Radius"; + if ((int)(((CircleAttributes)graphic.p).GetAttributes()).Item3 == 2) + { + circleType = "Diameter"; + } + + rowBuffer[definition.FindField("DistType")] = circleType; + break; + } + case "EllipseAttributes": + { + rowBuffer[definition.FindField("Minor")] = (((EllipseAttributes)graphic.p).GetAttributes()).Item2; + rowBuffer[definition.FindField("Major")] = (((EllipseAttributes)graphic.p).GetAttributes()).Item3; + rowBuffer[definition.FindField("Angle")] = (((EllipseAttributes)graphic.p).GetAttributes()).Item4; + break; + } + + } } + } Row row = table.CreateRow(rowBuffer); } @@ -273,40 +301,43 @@ private static async Task CreateFeatureClass(string dataset, GeomType geomType, var valueArray = Geoprocessing.MakeValueArray(arguments.ToArray()); IGPResult result = await Geoprocessing.ExecuteToolAsync("CreateFeatureclass_management", valueArray); - // Add additional fields based on type of graphic - string featureClass = connection + "/" + dataset; - string graphicsType = graphicsList[0].p.GetType().ToString().Replace("ProAppDistanceAndDirectionModule.", ""); - switch (graphicsType) + if (!isKML) { - case "LineAttributes": - { - IGPResult result2 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Distance", "DOUBLE")); - IGPResult result3 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Angle", "DOUBLE")); - break; - } - case "CircleAttributes": - { - IGPResult result2 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Distance", "DOUBLE")); - IGPResult result3 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "DistanceType", "TEXT")); - break; - } - case "EllipseAttributes": - { - IGPResult result2 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Minor", "DOUBLE")); - IGPResult result3 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Major", "DOUBLE")); - IGPResult result4 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Orient", "DOUBLE")); - break; - } - case "RangeAttributes": - { - IGPResult result2 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Rings", "SHORT")); - IGPResult result3 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Distance", "DOUBLE")); - IGPResult result4 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Radials", "SHORT")); - break; - } + // Add additional fields based on type of graphic + string featureClass = connection + "/" + dataset; + string graphicsType = graphicsList[0].p.GetType().ToString().Replace("ProAppDistanceAndDirectionModule.", ""); + switch (graphicsType) + { + case "LineAttributes": + { + IGPResult result2 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Distance", "DOUBLE")); + IGPResult result3 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Angle", "DOUBLE")); + break; + } + case "CircleAttributes": + { + IGPResult result2 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Distance", "DOUBLE")); + IGPResult result3 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "DistType", "TEXT")); + break; + } + case "EllipseAttributes": + { + IGPResult result2 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Minor", "DOUBLE")); + IGPResult result3 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Major", "DOUBLE")); + IGPResult result4 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Angle", "DOUBLE")); + break; + } + case "RangeAttributes": + { + IGPResult result2 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Rings", "LONG")); + IGPResult result3 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Distance", "DOUBLE")); + IGPResult result4 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Radials", "LONG")); + break; + } + } } - await CreateFeatures(graphicsList); + await CreateFeatures(graphicsList, isKML); if (isKML) { diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProEllipseViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProEllipseViewModel.cs index 23759a3f..3f737157 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProEllipseViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProEllipseViewModel.cs @@ -358,9 +358,11 @@ private void UpdateFeedbackWithEllipse(bool HasMinorAxis = true) ClearTempGraphics(); // Hold onto the attributes in case user saves graphics to file later - EllipseAttributes ellipseAttributes = new EllipseAttributes(Point1, minorAxis, majorAxisDistance, param.AxisDirection); + //EllipseAttributes ellipseAttributes = new EllipseAttributes(Point1, minorAxis, majorAxisDistance, para.AxisDirection); + // Point AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); + // Ellipse AddGraphicToMap(geom, ColorFactory.GreyRGB, null, true); } catch(Exception ex) @@ -521,7 +523,10 @@ private Geometry DrawEllipse() var geom = GeometryEngine.GeodesicEllipse(param, MapView.Active.Map.SpatialReference); - AddGraphicToMap(geom, new CIMRGBColor() { R = 255, B = 0, G = 0, Alpha = 25 }); + // Hold onto the attributes in case user saves graphics to file later + EllipseAttributes ellipseAttributes = new EllipseAttributes(Point1, MinorAxisDistance, MajorAxisDistance, param.AxisDirection); + + AddGraphicToMap(geom, new CIMRGBColor() { R = 255, B = 0, G = 0, Alpha = 25 }, ellipseAttributes); return geom as Geometry; } diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs index 1af374f4..3d933473 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs @@ -196,9 +196,11 @@ private void DrawRadials() }).Result; Geometry newline = GeometryEngine.GeodeticDensifyByLength(polyline, 0, LinearUnit.Meters, CurveType.Loxodrome); if (newline != null) - - AddGraphicToMap(newline); - + { + // Hold onto the attributes in case user saves graphics to file later + RangeAttributes rangeAttributes = new RangeAttributes(Point1, NumberOfRings, Distance, NumberOfRadials); + AddGraphicToMap(newline, rangeAttributes); + } azimuth += interval; } @@ -378,7 +380,9 @@ private void ConstructGeoCircle() var geom = GeometryEngine.GeodesicEllipse(param, MapView.Active.Map.SpatialReference); - AddGraphicToMap(geom); + // Hold onto the attributes in case user saves graphics to file later + RangeAttributes rangeAttributes = new RangeAttributes(Point1, NumberOfRings, Distance, NumberOfRadials); + AddGraphicToMap(geom, rangeAttributes); } private void UpdateFeedbackWithGeoCircle() @@ -398,8 +402,11 @@ private void UpdateFeedbackWithGeoCircle() var geom = GeometryEngine.GeodesicEllipse(param, MapView.Active.Map.SpatialReference); ClearTempGraphics(); + + // Hold onto the attributes in case user saves graphics to file later + RangeAttributes rangeAttributes = new RangeAttributes(Point1, NumberOfRings, Distance, NumberOfRadials); AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); - AddGraphicToMap(geom, ColorFactory.GreyRGB, null, true); + AddGraphicToMap(geom, ColorFactory.GreyRGB, rangeAttributes, true); } } } From 6724aac56cfdaf50f0e27452ffea1b85f6e68631 Mon Sep 17 00:00:00 2001 From: Thargoids Date: Mon, 6 Feb 2017 16:09:45 +0000 Subject: [PATCH 10/96] On pressing escape remove graphic or disable tool --- .../ViewModels/ProTabBaseViewModel.cs | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs index 6ed52fbe..1e23e64d 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs @@ -797,9 +797,29 @@ private void OnTabItemSelected(object obj) /// always null private void OnKeypressEscape(object obj) { - if (FrameworkApplication.CurrentTool != null) + if (isActiveTab) { - Reset(true); + if (FrameworkApplication.CurrentTool != null) + { + // User has activated the Map Point tool but not created a point + // Or User has previously finished creating a graphic + // Either way, assume they want to disable the Map Point tool + if ((IsToolActive && !HasPoint1) || (IsToolActive && HasPoint2)) + { + Reset(true); + IsToolActive = false; + return; + } + + // User has activated Map Point tool and created a point but not completed the graphic + // Assume they want to cancel any graphic creation in progress + // but still keep the Map Point tool active + if (IsToolActive && HasPoint1 && !HasPoint2) + { + Reset(false); + return; + } + } } } From 59c8f63d9ac84f6f702905f466cfc0f1371baece Mon Sep 17 00:00:00 2001 From: Chris Moore Date: Tue, 7 Feb 2017 12:13:38 -0500 Subject: [PATCH 11/96] Update version to 2.0 --- .../ArcMapAddinDistanceAndDirection/Config.esriaddinx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Config.esriaddinx b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Config.esriaddinx index 362643bc..9068631e 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Config.esriaddinx +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Config.esriaddinx @@ -2,11 +2,11 @@ Distance and Direction {3e1d78f8-72a5-4463-ad11-0524a5913c9d} Create Lines, Circles, Ellipses and Range Rings - 1.0 + 2.0 Images\ArcMapAddinDistanceAndDirection.png Esri Esri - 1/25/2016 + 1/20/2017 @@ -23,4 +23,4 @@ - \ No newline at end of file + From 822aa90e4e438b2f8f0aaea8004be48c3d905c7a Mon Sep 17 00:00:00 2001 From: Chris Moore Date: Tue, 7 Feb 2017 12:15:21 -0500 Subject: [PATCH 12/96] Update version to 2.0 --- .../ProAppDistanceAndDirectionModule/Config.daml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Config.daml b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Config.daml index 353506a5..24065c2a 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Config.daml +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Config.daml @@ -1,11 +1,11 @@  - + Distance and Direction Create Lines, Circles, Ellipses and Range Rings Images\AddinDesktop32.png Esri Esri - 3/30/2016 10:44:50 AM, 2016 + 01/20/2017 Framework @@ -43,4 +43,4 @@ - \ No newline at end of file + From ca4eade642fd17a74c8472fd165a9f2ccafd2cbd Mon Sep 17 00:00:00 2001 From: Thargoids Date: Thu, 9 Feb 2017 17:19:00 +0000 Subject: [PATCH 13/96] Remove graphic when distance field totally cleared --- .../ViewModels/CircleViewModel.cs | 2 +- .../ViewModels/TabBaseViewModel.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs index fedfa564..6329854c 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs @@ -308,7 +308,7 @@ public override string DistanceString } else { - UpdateFeedbackWithGeoCircle(); + ClearTempGraphics(); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } } diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs index fa204d51..6047b691 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs @@ -614,7 +614,7 @@ internal void ClearTempGraphics() RemoveGraphics(gc, true); - av.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); + av.PartialRefresh(esriViewDrawPhase.esriViewAll, null, null); RaisePropertyChanged(() => HasMapGraphics); } From 6785f4d3e157603145ba6a6ecb2e08d979c19d35 Mon Sep 17 00:00:00 2001 From: Thargoids Date: Fri, 10 Feb 2017 16:17:56 +0000 Subject: [PATCH 14/96] Updated following review --- .../Models/FeatureClassUtils.cs | 65 +++++++++++++------ .../ViewModels/ProCircleViewModel.cs | 4 +- .../ViewModels/ProEllipseViewModel.cs | 2 +- .../ViewModels/ProGraphicAttributes.cs | 59 +++++------------ .../ViewModels/ProLinesViewModel.cs | 2 +- .../ViewModels/ProRangeViewModel.cs | 10 +-- 6 files changed, 71 insertions(+), 71 deletions(-) diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs index 213ceb19..9fc0fa62 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs @@ -166,17 +166,33 @@ await QueuedTask.Run(() => { case "LineAttributes": { - // Add attributes - rowBuffer[definition.FindField("Distance")] = (((LineAttributes)graphic.p).GetAttributes()).Item3; - rowBuffer[definition.FindField("Angle")] = (((LineAttributes)graphic.p).GetAttributes()).Item4; - break; + try + { + // Add attributes + rowBuffer[definition.FindField("Distance")] = ((LineAttributes)graphic.p)._distance; + rowBuffer[definition.FindField("Angle")] = ((LineAttributes)graphic.p).angle; + break; + } + // Catch exception likely due to missing fields + // Just skip attempting to write to fields + catch + { + break; + } } case "RangeAttributes": { - rowBuffer[definition.FindField("Rings")] = (((RangeAttributes)graphic.p).GetAttributes()).Item2; - rowBuffer[definition.FindField("Distance")] = (((RangeAttributes)graphic.p).GetAttributes()).Item3; - rowBuffer[definition.FindField("Radials")] = (((RangeAttributes)graphic.p).GetAttributes()).Item4; - break; + try + { + rowBuffer[definition.FindField("Rings")] = ((RangeAttributes)graphic.p).numRings; + rowBuffer[definition.FindField("Distance")] = ((RangeAttributes)graphic.p).distance; + rowBuffer[definition.FindField("Radials")] = ((RangeAttributes)graphic.p).numRadials; + break; + } + catch + { + break; + } } } } @@ -194,25 +210,36 @@ await QueuedTask.Run(() => { case "CircleAttributes": { - rowBuffer[definition.FindField("Distance")] = (((CircleAttributes)graphic.p).GetAttributes()).Item2; + try + { + rowBuffer[definition.FindField("Distance")] = ((CircleAttributes)graphic.p).distance; + + string circleType = "Radius"; + if ((int)((CircleAttributes)graphic.p).circleFromTypes == 2) + { + circleType = "Diameter"; + } - string circleType = "Radius"; - if ((int)(((CircleAttributes)graphic.p).GetAttributes()).Item3 == 2) + rowBuffer[definition.FindField("DistType")] = circleType; + break; + } + catch { - circleType = "Diameter"; + break; } - - rowBuffer[definition.FindField("DistType")] = circleType; - break; } case "EllipseAttributes": + try + { + rowBuffer[definition.FindField("Minor")] = ((EllipseAttributes)graphic.p).minorAxis; + rowBuffer[definition.FindField("Major")] = ((EllipseAttributes)graphic.p).majorAxis; + rowBuffer[definition.FindField("Angle")] = ((EllipseAttributes)graphic.p).angle; + break; + } + catch { - rowBuffer[definition.FindField("Minor")] = (((EllipseAttributes)graphic.p).GetAttributes()).Item2; - rowBuffer[definition.FindField("Major")] = (((EllipseAttributes)graphic.p).GetAttributes()).Item3; - rowBuffer[definition.FindField("Angle")] = (((EllipseAttributes)graphic.p).GetAttributes()).Item4; break; } - } } } diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProCircleViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProCircleViewModel.cs index 0fda1651..2d12d10d 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProCircleViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProCircleViewModel.cs @@ -532,8 +532,8 @@ private Geometry CreateCircle(bool isFeedback) } // Hold onto the attributes in case user saves graphics to file later - CircleAttributes circleAttributes = new CircleAttributes(Point1, Distance, CircleType); - + //CircleAttributes circleAttributes = new CircleAttributes(Point1, Distance, CircleType); + CircleAttributes circleAttributes = new CircleAttributes() { mapPoint = Point1, distance = Distance, circleFromTypes = CircleType }; AddGraphicToMap(geom, color, (ProGraphicAttributes)circleAttributes, IsTempGraphic: isFeedback); return geom as Geometry; diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProEllipseViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProEllipseViewModel.cs index 3f737157..626d9936 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProEllipseViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProEllipseViewModel.cs @@ -524,7 +524,7 @@ private Geometry DrawEllipse() var geom = GeometryEngine.GeodesicEllipse(param, MapView.Active.Map.SpatialReference); // Hold onto the attributes in case user saves graphics to file later - EllipseAttributes ellipseAttributes = new EllipseAttributes(Point1, MinorAxisDistance, MajorAxisDistance, param.AxisDirection); + EllipseAttributes ellipseAttributes = new EllipseAttributes() { mapPoint = Point1, minorAxis = MinorAxisDistance, majorAxis = MajorAxisDistance, angle = param.AxisDirection }; AddGraphicToMap(geom, new CIMRGBColor() { R = 255, B = 0, G = 0, Alpha = 25 }, ellipseAttributes); diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProGraphicAttributes.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProGraphicAttributes.cs index d188a854..bbc32ab6 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProGraphicAttributes.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProGraphicAttributes.cs @@ -14,62 +14,33 @@ public class ProGraphicAttributes public class LineAttributes : ProGraphicAttributes { - Tuple attributes; - - public LineAttributes(MapPoint startPt, MapPoint endPt, double distance, double angle) - { - attributes = new Tuple(startPt, endPt, distance, angle); - } - - public Tuple GetAttributes() - { - return attributes; - } + public MapPoint mapPoint1 { get; set; } + public MapPoint mapPoint2 { get; set; } + public double _distance { get; set; } + public double angle { get; set; } } public class CircleAttributes : ProGraphicAttributes { - Tuple attributes; - - public CircleAttributes(MapPoint centerPt, double distance, CircleFromTypes circleFromTypes) - { - attributes = new Tuple(centerPt, distance, circleFromTypes); - } - - public Tuple GetAttributes() - { - return attributes; - } + public MapPoint mapPoint { get; set; } + public Double distance { get; set; } + public CircleFromTypes circleFromTypes { get; set; } } public class EllipseAttributes : ProGraphicAttributes { - Tuple attributes; - - public EllipseAttributes(MapPoint centerPt, double minorX, double majorX, double orientX) - { - attributes = new Tuple(centerPt, minorX, majorX, orientX); - } - - public Tuple GetAttributes() - { - return attributes; - } + public MapPoint mapPoint { get; set; } + public double majorAxis{ get; set; } + public double minorAxis { get; set; } + public double angle { get; set; } } public class RangeAttributes : ProGraphicAttributes { - Tuple attributes; - - public RangeAttributes(MapPoint centerPt, int rings, double distance, int radials) - { - attributes = new Tuple(centerPt, rings, distance, radials); - } - - public Tuple GetAttributes() - { - return attributes; - } + public MapPoint mapPoint { get; set; } + public int numRings { get; set; } + public double distance { get; set; } + public int numRadials { get; set; } } } diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProLinesViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProLinesViewModel.cs index 8e2893d9..f14c656e 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProLinesViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProLinesViewModel.cs @@ -396,7 +396,7 @@ private Geometry CreatePolyline() Geometry newline = GeometryEngine.GeodeticDensifyByLength(polyline, 0, lu, curveType); // Hold onto the attributes in case user saves graphics to file later - LineAttributes lineAttributes = new LineAttributes(Point1, Point2, distance, (double)azimuth); + LineAttributes lineAttributes = new LineAttributes(){mapPoint1 = Point1, mapPoint2 = Point2, _distance = distance, angle = (double)azimuth}; AddGraphicToMap(newline, (ProGraphicAttributes)lineAttributes); ResetPoints(); diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs index 3d933473..8a1d0598 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs @@ -198,7 +198,7 @@ private void DrawRadials() if (newline != null) { // Hold onto the attributes in case user saves graphics to file later - RangeAttributes rangeAttributes = new RangeAttributes(Point1, NumberOfRings, Distance, NumberOfRadials); + RangeAttributes rangeAttributes = new RangeAttributes() { mapPoint = Point1, numRings = NumberOfRings, distance = Distance, numRadials = NumberOfRadials }; AddGraphicToMap(newline, rangeAttributes); } @@ -247,7 +247,7 @@ private Geometry DrawRings() geom = GeometryEngine.GeodesicEllipse(param, MapView.Active.Map.SpatialReference); // Hold onto the attributes in case user saves graphics to file later - RangeAttributes rangeAttributes = new RangeAttributes(Point1, numberOfRings, radius, numberOfRadials); + RangeAttributes rangeAttributes = new RangeAttributes() { mapPoint = Point1, numRings = numberOfRings, distance = radius, numRadials = numberOfRadials }; AddGraphicToMap(geom, rangeAttributes); } @@ -381,7 +381,8 @@ private void ConstructGeoCircle() var geom = GeometryEngine.GeodesicEllipse(param, MapView.Active.Map.SpatialReference); // Hold onto the attributes in case user saves graphics to file later - RangeAttributes rangeAttributes = new RangeAttributes(Point1, NumberOfRings, Distance, NumberOfRadials); + RangeAttributes rangeAttributes = new RangeAttributes() { mapPoint = Point1, numRings = NumberOfRings, distance = Distance, numRadials = NumberOfRadials }; + AddGraphicToMap(geom, rangeAttributes); } @@ -404,7 +405,8 @@ private void UpdateFeedbackWithGeoCircle() ClearTempGraphics(); // Hold onto the attributes in case user saves graphics to file later - RangeAttributes rangeAttributes = new RangeAttributes(Point1, NumberOfRings, Distance, NumberOfRadials); + RangeAttributes rangeAttributes = new RangeAttributes() { mapPoint = Point1, numRings = NumberOfRings, distance = Distance, numRadials = NumberOfRadials }; + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); AddGraphicToMap(geom, ColorFactory.GreyRGB, rangeAttributes, true); } From 57ec63b8ab4bd5aac359b33b3283d73debd7c4a4 Mon Sep 17 00:00:00 2001 From: Thargoids Date: Mon, 13 Feb 2017 10:57:44 +0000 Subject: [PATCH 15/96] Escape functionality fixed for Pro --- .../MapPointTool.cs | 14 +++++ .../ViewModels/TabBaseViewModel.cs | 60 +++++++++++++++++++ .../ViewModels/ProRangeViewModel.cs | 1 + .../ViewModels/ProTabBaseViewModel.cs | 5 +- 4 files changed, 78 insertions(+), 2 deletions(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/MapPointTool.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/MapPointTool.cs index 562ee1e9..252698b5 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/MapPointTool.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/MapPointTool.cs @@ -103,6 +103,20 @@ protected override void OnDoubleClick() Mediator.NotifyColleagues(Constants.MOUSE_DOUBLE_CLICK, null); } + protected override bool OnDeactivate() + { + return true; + } + + // If the user presses Escape cancel the sketch + protected override void OnKeyDown(KeyEventArgs k) + { + if (k.KeyCode == Keys.Escape) + { + Mediator.NotifyColleagues(DistanceAndDirectionLibrary.Constants.KEYPRESS_ESCAPE, null); + } + } + } } diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs index 6047b691..e80de3e3 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs @@ -63,6 +63,7 @@ public TabBaseViewModel() Mediator.Register(Constants.NEW_MAP_POINT, OnNewMapPointEvent); Mediator.Register(Constants.MOUSE_MOVE_POINT, OnMouseMoveEvent); Mediator.Register(Constants.TAB_ITEM_SELECTED, OnTabItemSelected); + Mediator.Register(Constants.KEYPRESS_ESCAPE, OnKeypressEscape); configObserver = new PropertyObserver(DistanceAndDirectionConfig.AddInConfig) .RegisterHandler(n => n.DisplayCoordinateType, n => @@ -932,6 +933,65 @@ private void OnTabItemSelected(object obj) IsActiveTab = (obj == this); } + /// + /// Handler for the escape key press event + /// Helps cancel operation when escape key is pressed + /// + /// always null + private void OnKeypressEscape(object obj) + { + if (isActiveTab) + { + if (ArcMap.Application.CurrentTool != null) + { + // Special handling required for ellipses + if (this is EllipseViewModel) + { + // User has activated the Map Point tool but not created a point + // Or User has previously finished creating a graphic + // Either way, assume they want to disable the Map Point tool + if ((IsToolActive && !HasPoint1) || (IsToolActive && HasPoint2)) + { + Reset(true); + IsToolActive = false; + return; + } + + // User has activated Map Point tool and created a point but not completed the graphic + // Assume they want to cancel any graphic creation in progress + // but still keep the Map Point tool active + if (IsToolActive && HasPoint1 && !HasPoint2) + { + Reset(false); + return; + } + } + else + { + // User has activated the Map Point tool but not created a point + // Or User has previously finished creating a graphic + // Either way, assume they want to disable the Map Point tool + if ((IsToolActive && !HasPoint1) || (IsToolActive && HasPoint2)) + { + Reset(true); + IsToolActive = false; + return; + } + + // User has activated Map Point tool and created a point but not completed the graphic + // Assume they want to cancel any graphic creation in progress + // but still keep the Map Point tool active + if (IsToolActive && HasPoint1 && !HasPoint2) + { + Reset(false); + return; + } + } + } + } + } + + /// /// Converts a polyline into a polygon diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs index 365dfb00..884b7576 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProRangeViewModel.cs @@ -354,6 +354,7 @@ internal override void Reset(bool toolReset) base.Reset(toolReset); NumberOfRadials = 0; + NumberOfRings = 10; } private void ConstructGeoCircle() diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs index 1e23e64d..fe0726d0 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs @@ -156,6 +156,7 @@ public virtual bool IsToolActive internal bool HasPoint1 = false; internal bool HasPoint2 = false; + internal bool HasPoint3 = false; public bool HasMapGraphics { @@ -804,7 +805,7 @@ private void OnKeypressEscape(object obj) // User has activated the Map Point tool but not created a point // Or User has previously finished creating a graphic // Either way, assume they want to disable the Map Point tool - if ((IsToolActive && !HasPoint1) || (IsToolActive && HasPoint2)) + if ((IsToolActive && !HasPoint1) || (IsToolActive && HasPoint3)) { Reset(true); IsToolActive = false; @@ -814,7 +815,7 @@ private void OnKeypressEscape(object obj) // User has activated Map Point tool and created a point but not completed the graphic // Assume they want to cancel any graphic creation in progress // but still keep the Map Point tool active - if (IsToolActive && HasPoint1 && !HasPoint2) + if (IsToolActive && HasPoint1) { Reset(false); return; From 30ed3e7dfd5498fd4a247f6ea9fbd2ed227522b3 Mon Sep 17 00:00:00 2001 From: Thargoids Date: Mon, 13 Feb 2017 11:42:07 +0000 Subject: [PATCH 16/96] Escape keypress now working properly in ArcMap --- .../ViewModels/TabBaseViewModel.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs index e80de3e3..f854b21d 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs @@ -83,6 +83,7 @@ public TabBaseViewModel() internal bool HasPoint1 = false; internal bool HasPoint2 = false; + internal bool HasPoint3 = false; internal INewLineFeedback feedback = null; internal FeatureClassUtils fcUtils = new FeatureClassUtils(); internal KMLUtils kmlUtils = new KMLUtils(); @@ -746,6 +747,7 @@ internal virtual void OnNewMapPointEvent(object obj) ClearTempGraphics(); Point1 = point; HasPoint1 = true; + Point1Formatted = string.Empty; var color = new RgbColorClass() { Green = 255 } as IColor; @@ -769,6 +771,11 @@ internal virtual void OnNewMapPointEvent(object obj) CreateMapElement(); ResetPoints(); } + + if (!HasPoint3) + { + HasPoint3 = true; + } } #endregion @@ -901,7 +908,7 @@ internal virtual void Reset(bool toolReset) /// internal virtual void ResetPoints() { - HasPoint1 = HasPoint2 = false; + HasPoint1 = HasPoint2 = HasPoint3 = false; } /// @@ -950,7 +957,7 @@ private void OnKeypressEscape(object obj) // User has activated the Map Point tool but not created a point // Or User has previously finished creating a graphic // Either way, assume they want to disable the Map Point tool - if ((IsToolActive && !HasPoint1) || (IsToolActive && HasPoint2)) + if ((IsToolActive && !HasPoint1) || (IsToolActive && HasPoint3)) { Reset(true); IsToolActive = false; @@ -960,7 +967,7 @@ private void OnKeypressEscape(object obj) // User has activated Map Point tool and created a point but not completed the graphic // Assume they want to cancel any graphic creation in progress // but still keep the Map Point tool active - if (IsToolActive && HasPoint1 && !HasPoint2) + if (IsToolActive && HasPoint1 && !HasPoint3) { Reset(false); return; From 8d7283173337c7405c6532990bcfba519456e89b Mon Sep 17 00:00:00 2001 From: Lorraine Funkhouser Date: Mon, 13 Feb 2017 10:19:08 -0800 Subject: [PATCH 17/96] Update README.md Changed repo owner --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 37dad27c..9b524e26 100644 --- a/README.md +++ b/README.md @@ -176,14 +176,14 @@ Anyone and everyone is welcome to contribute. Please see our [guidelines for con ### Repository Points of Contact -#### Repository Owner: [Joe](https://github.com/jmccausland) +#### Repository Owner: [Kevin](https://github.com/kgonzago) * Merge Pull Requests * Creates Releases and Tags * Manages Milestones * Manages and Assigns Issues -#### Secondary: [Lyle](https://github.com/topowright) +#### Secondary: [Patrick](https://github.com/pHill5136) * Backup when the Owner is away From 41a88a32efcf3cbd901ee4fb5289aa0622c5d50c Mon Sep 17 00:00:00 2001 From: Thargoids Date: Tue, 14 Feb 2017 11:50:51 +0000 Subject: [PATCH 18/96] Fixes Circle glitches but UI warning TBD --- .../ViewModels/CircleViewModel.cs | 101 ++++++++++++++++-- 1 file changed, 92 insertions(+), 9 deletions(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs index 6329854c..25b6667c 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs @@ -37,6 +37,8 @@ public CircleViewModel() #region Properties + private double DistanceLimit = 20000000; + CircleFromTypes circleType = CircleFromTypes.Radius; /// /// Type of circle property @@ -75,7 +77,17 @@ public TimeUnits TimeUnit } timeUnit = value; - UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit); + // Prevent graphical glitches from excessively high inputs + double distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + if (distanceInMeters > DistanceLimit) + { + RaisePropertyChanged(() => TravelTime); + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + + UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, true); RaisePropertyChanged(() => TimeUnit); } @@ -144,22 +156,36 @@ public double TravelTime if (value < 0.0) { UpdateFeedbackWithGeoCircle(); + ClearTempGraphics(); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); } travelTime = value; - // we need to make sure we are in the same units as the Distance property before setting - UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit); + // Prevent graphical glitches from excessively high inputs + double distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + if (distanceInMeters > DistanceLimit) + { + RaisePropertyChanged(() => TravelTime); + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + // we need to make sure we are in the same units as the Distance property before setting + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, true); RaisePropertyChanged(() => TravelTime); } } - private void UpdateDistance(double distance, DistanceTypes fromDistanceType) + private void UpdateDistance(double distance, DistanceTypes fromDistanceType, bool belowLimit) { Distance = ConvertFromTo(fromDistanceType, LineDistanceType, distance); - UpdateFeedbackWithGeoCircle(); + + if (belowLimit) + { + UpdateFeedbackWithGeoCircle(); + } } double travelRate = 0.0; @@ -175,12 +201,24 @@ public double TravelRate set { if (value < 0.0) + { + ClearTempGraphics(); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); + } travelRate = value; - UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit); + // Prevent graphical glitches from excessively high inputs + double distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + if (distanceInMeters > DistanceLimit) + { + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); + RaisePropertyChanged(() => TravelRate); + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, true); RaisePropertyChanged(() => TravelRate); } } @@ -220,7 +258,17 @@ public DistanceTypes RateUnit rateUnit = value; - UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit); + // Prevent graphical glitches from excessively high inputs + double distanceInMeters = ConvertFromTo(rateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + if (distanceInMeters > DistanceLimit) + { + RaisePropertyChanged(() => TravelTime); + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + + UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, true); RaisePropertyChanged(() => RateUnit); } @@ -241,7 +289,17 @@ public RateTimeTypes RateTimeUnit } rateTimeUnit = value; - UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit); + // Prevent graphical glitches from excessively high inputs + double distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + if (distanceInMeters > DistanceLimit) + { + RaisePropertyChanged(() => TravelTime); + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + + UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, true); RaisePropertyChanged(() => RateTimeUnit); } @@ -304,6 +362,14 @@ public override string DistanceString Distance = d; + double distanceInMeters = ConvertFromTo(LineDistanceType, DistanceTypes.Meters, Distance); + + if (distanceInMeters > DistanceLimit) + { + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + UpdateFeedbackWithGeoCircle(); } else @@ -352,6 +418,13 @@ public override DistanceTypes LineDistanceType base.LineDistanceType = value; + double distanceInMeters = ConvertFromTo(value, DistanceTypes.Meters, Distance); + if (distanceInMeters > DistanceLimit) + { + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + UpdateFeedbackWithGeoCircle(); } } @@ -371,7 +444,17 @@ internal override void OnNewMapPointEvent(object obj) if (IsDistanceCalcExpanded) { - UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit); + // Prevent graphical glitches from excessively high inputs + double distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + if (distanceInMeters > DistanceLimit) + { + RaisePropertyChanged(() => TravelTime); + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, true); } } From 72191ca029a55b73c4e6da33f87f97624ed2fc0d Mon Sep 17 00:00:00 2001 From: Thargoids Date: Tue, 14 Feb 2017 14:38:41 +0000 Subject: [PATCH 19/96] UI updates properly. --- .../ViewModels/CircleViewModel.cs | 14 ++++++++++++++ .../Views/CircleView.xaml | 11 ++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs index 25b6667c..6a04fb4b 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs @@ -90,6 +90,8 @@ public TimeUnits TimeUnit UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, true); RaisePropertyChanged(() => TimeUnit); + RaisePropertyChanged(() => TravelTime); + RaisePropertyChanged(() => TravelRate); } } @@ -175,6 +177,11 @@ public double TravelTime // we need to make sure we are in the same units as the Distance property before setting UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, true); RaisePropertyChanged(() => TravelTime); + + // Force an update of this in order to clear error message in bound WPF control + RaisePropertyChanged(() => TravelRate); + RaisePropertyChanged(() => RateTimeUnit); + RaisePropertyChanged(() => TimeUnit); } } @@ -220,6 +227,11 @@ public double TravelRate UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, true); RaisePropertyChanged(() => TravelRate); + + // Force an update of this in order to clear error message in bound WPF control + RaisePropertyChanged(() => TravelTime); + RaisePropertyChanged(() => RateTimeUnit); + RaisePropertyChanged(() => TimeUnit); } } @@ -302,6 +314,8 @@ public RateTimeTypes RateTimeUnit UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, true); RaisePropertyChanged(() => RateTimeUnit); + RaisePropertyChanged(() => TravelTime); + RaisePropertyChanged(() => TravelRate); } } diff --git a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml index f76a7bd4..20965ef6 100644 --- a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml +++ b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml @@ -77,7 +77,7 @@ - - + SelectedItem="{Binding Path=TimeUnit,Mode=TwoWay, ValidatesOnExceptions=True}" + > + Mode=TwoWay, ValidatesOnExceptions=True}" > Date: Tue, 14 Feb 2017 14:42:13 +0000 Subject: [PATCH 20/96] Tidy up --- .../ViewModels/CircleViewModel.cs | 8 +++++--- .../DistanceAndDirectionLibrary/Views/CircleView.xaml | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs index 6a04fb4b..c252333b 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs @@ -89,6 +89,7 @@ public TimeUnits TimeUnit UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, true); + // Trigger validation to clear error messages as necessary RaisePropertyChanged(() => TimeUnit); RaisePropertyChanged(() => TravelTime); RaisePropertyChanged(() => TravelRate); @@ -177,8 +178,8 @@ public double TravelTime // we need to make sure we are in the same units as the Distance property before setting UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, true); RaisePropertyChanged(() => TravelTime); - - // Force an update of this in order to clear error message in bound WPF control + + // Trigger validation to clear error messages as necessary RaisePropertyChanged(() => TravelRate); RaisePropertyChanged(() => RateTimeUnit); RaisePropertyChanged(() => TimeUnit); @@ -228,7 +229,7 @@ public double TravelRate UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, true); RaisePropertyChanged(() => TravelRate); - // Force an update of this in order to clear error message in bound WPF control + // Trigger validation to clear error messages as necessary RaisePropertyChanged(() => TravelTime); RaisePropertyChanged(() => RateTimeUnit); RaisePropertyChanged(() => TimeUnit); @@ -313,6 +314,7 @@ public RateTimeTypes RateTimeUnit UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, true); + // Trigger validation to clear error messages as necessary RaisePropertyChanged(() => RateTimeUnit); RaisePropertyChanged(() => TravelTime); RaisePropertyChanged(() => TravelRate); diff --git a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml index 20965ef6..15b57d44 100644 --- a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml +++ b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml @@ -77,7 +77,7 @@ - Date: Thu, 16 Feb 2017 14:54:50 +0000 Subject: [PATCH 21/96] Fixes some existing tests, adds new for issue #198 --- .../ViewModels/LinesViewModel.cs | 4 ++- .../ViewModels/TabBaseViewModel.cs | 29 ++++++++++++------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs index 85803d86..a85782e1 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs @@ -129,8 +129,10 @@ public double? Azimuth get { return azimuth; } set { - if (value < 0.0 || value > 360) + if (value < 0.0) throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); + if (value > 360 && LineAzimuthType == AzimuthTypes.Degrees) + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); azimuth = value; RaisePropertyChanged(() => Azimuth); diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs index f854b21d..8377a1b6 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs @@ -199,15 +199,19 @@ public string Point1Formatted var color = new RgbColorClass() { Green = 255 } as IColor; AddGraphicToMap(Point1, color, true); // lets try feedback - var mxdoc = ArcMap.Application.Document as IMxDocument; - var av = mxdoc.FocusMap as IActiveView; - point.Project(mxdoc.FocusMap.SpatialReference); - CreateFeedback(point, av); - feedback.Start(point); - if(Point2 != null) + // Avoid null reference exception during automated testing + if (ArcMap.Application != null) { - UpdateDistance(GetGeoPolylineFromPoints(Point1, Point2)); - FeedbackMoveTo(Point2); + var mxdoc = ArcMap.Application.Document as IMxDocument; + var av = mxdoc.FocusMap as IActiveView; + point.Project(mxdoc.FocusMap.SpatialReference); + CreateFeedback(point, av); + feedback.Start(point); + if (Point2 != null) + { + UpdateDistance(GetGeoPolylineFromPoints(Point1, Point2)); + FeedbackMoveTo(Point2); + } } } else @@ -604,6 +608,11 @@ private string PromptSaveFileDialog() /// internal void ClearTempGraphics() { + // Indicates we are running an automated test and as such we do not want to + // proceed and generate a NullReferenceException + if (ArcMap.Application == null) + return; + var mxdoc = ArcMap.Application.Document as IMxDocument; if (mxdoc == null) return; @@ -1239,7 +1248,7 @@ protected double TrimPrecision(double inputDistance) protected double TrimPrecision(double inputDistance, DistanceTypes lineDistanceType_param) { double returnDistance = 0; - // For smaller units assume no fraction is required + // For smaller units assume a tenth is sufficient // For larger units provide ten thousandth i.e. 4 decimal places, probably more than sufficient switch (lineDistanceType_param) { @@ -1251,7 +1260,7 @@ protected double TrimPrecision(double inputDistance, DistanceTypes lineDistanceT case DistanceTypes.Meters: case DistanceTypes.Feet: case DistanceTypes.Yards: - returnDistance = Math.Round(inputDistance, 0); + returnDistance = Math.Round(inputDistance, 1); break; default: break; From 210e8a1255034a9d49c1fd500f1400618de54523 Mon Sep 17 00:00:00 2001 From: Thargoids Date: Thu, 16 Feb 2017 14:57:22 +0000 Subject: [PATCH 22/96] Added tests for #198 --- .../ArcMapAddinDistanceAndDirectionTests.cs | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs index 8fe23dd2..9c0c9bdc 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs @@ -170,6 +170,84 @@ public void CircleViewModel_ThrowsException4() circleVM.TravelRate = -1; } + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void CircleViewModel_ThrowsException5() + { + var circleVM = new CircleViewModel(); + + circleVM.TimeUnit = TimeUnits.Hours; + circleVM.RateTimeUnit = RateTimeTypes.MetersHour; + circleVM.TravelTime = 1; + circleVM.TravelRate = 20000000; + circleVM.RateUnit = DistanceTypes.Miles; + } + + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void CircleViewModel_ThrowsException6() + { + var circleVM = new CircleViewModel(); + + circleVM.TimeUnit = TimeUnits.Seconds; + circleVM.RateTimeUnit = RateTimeTypes.MetersSec; + circleVM.TravelTime = 1; + circleVM.TravelRate = 20000000; + circleVM.TimeUnit = TimeUnits.Hours; + } + + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void CircleViewModel_ThrowsException7() + { + var circleVM = new CircleViewModel(); + + circleVM.TimeUnit = TimeUnits.Hours; + circleVM.RateTimeUnit = RateTimeTypes.MetersHour; + circleVM.TravelTime = 1; + circleVM.TravelRate = 20000001; + } + + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void CircleViewModel_ThrowsException8() + { + var circleVM = new CircleViewModel(); + + circleVM.TimeUnit = TimeUnits.Hours; + circleVM.RateTimeUnit = RateTimeTypes.MetersHour; + circleVM.TravelTime = 2; + circleVM.TravelRate = 10000001; + } + + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void CircleViewModel_ThrowsException9() + { + var circleVM = new CircleViewModel(); + + circleVM.Point1Formatted = "0 0"; + circleVM.DistanceString = "20000001"; + } + + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void CircleViewModel_ThrowsException10() + { + var circleVM = new CircleViewModel(); + + circleVM.Point1Formatted = "0 181"; + } + + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void CircleViewModel_ThrowsException11() + { + var circleVM = new CircleViewModel(); + + circleVM.Point1Formatted = "91 0"; + } + [TestMethod] public void CircleViewModel() { From db67e9255ce40b1d2a7f19ddeacb68f7f8d17209 Mon Sep 17 00:00:00 2001 From: Thargoids Date: Fri, 17 Feb 2017 09:32:14 +0000 Subject: [PATCH 23/96] Missing changes --- .../ArcMapAddinDistanceAndDirectionTests.cs | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs index 8fe23dd2..3c38fcdf 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs @@ -34,7 +34,7 @@ public static void MyClassInitialize(TestContext testContext) bool blnBoundToRuntime = ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); Assert.IsTrue(blnBoundToRuntime, "Not bound to runtime"); IAoInitialize aoInitialize = new AoInitializeClass(); - aoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeBasic); + aoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeStandard); } #region Lines View Model @@ -91,6 +91,15 @@ public void LinesViewModel_ThrowsException6() lineVM.Azimuth = -1; } + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void LinesViewModel_ThrowsException7() + { + var lineVM = new LinesViewModel(); + + lineVM.Azimuth = 361; + } + [TestMethod] public void LineViewModel() @@ -130,8 +139,18 @@ public void LineViewModel() Assert.AreEqual(50.5, lineVM.Distance); lineVM.LineDistanceType = DistanceAndDirectionLibrary.DistanceTypes.Miles; Assert.AreEqual(50.5, lineVM.Distance); + + // Check TrimPrecision is trimming correctly according to LineDistanceType + lineVM.LineDistanceType = DistanceTypes.Kilometers; + lineVM.Distance = 1.012345; + Assert.AreEqual(1.0123, lineVM.Distance); + + lineVM.LineDistanceType = DistanceTypes.Meters; + lineVM.Distance = 1.12; + Assert.AreEqual(1.1, lineVM.Distance); } + #endregion Lines View Model #region Circle View Model @@ -184,6 +203,13 @@ public void CircleViewModel() circleVM.Point1 = new Point() { X = -119.8, Y = 34.4 }; Assert.AreEqual(circleVM.Point1Formatted, "34.4 -119.8"); + + // Check that Distance is not converted when LineDistanceType is changed + // #260 + circleVM.LineDistanceType = DistanceTypes.Meters; + circleVM.Distance = 1000.0; + circleVM.LineDistanceType = DistanceTypes.Kilometers; + Assert.AreEqual(circleVM.Distance, 1000.0); } #endregion Circle View Model From ccb465b52c71f6aa1a75deb5661f947892397c72 Mon Sep 17 00:00:00 2001 From: Thargoids Date: Fri, 17 Feb 2017 09:39:02 +0000 Subject: [PATCH 24/96] Put license code back --- .../ArcMapAddinDistanceAndDirectionTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs index 3c38fcdf..da3978af 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs @@ -34,7 +34,7 @@ public static void MyClassInitialize(TestContext testContext) bool blnBoundToRuntime = ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); Assert.IsTrue(blnBoundToRuntime, "Not bound to runtime"); IAoInitialize aoInitialize = new AoInitializeClass(); - aoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeStandard); + aoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeBasic); } #region Lines View Model From b463234266ec671a75b2b0e474fe0bd4313e44e4 Mon Sep 17 00:00:00 2001 From: Thargoids Date: Fri, 17 Feb 2017 11:28:27 +0000 Subject: [PATCH 25/96] Fix for Ellipse glitches #198 --- .../ViewModels/EllipseViewModel.cs | 53 +++++++++++++++++++ .../Views/EllipseView.xaml | 4 +- 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs index 2f36244a..5dea6764 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs @@ -35,6 +35,8 @@ public EllipseViewModel() #region Properties + private double MajorAxisLimit = 20000000; + public IPoint CenterPoint { get; set; } public ISymbol FeedbackSymbol { get; set; } @@ -103,6 +105,23 @@ public double MinorAxisDistance { if (value < 0.0) throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); + if (value > MajorAxisLimit) + { + // Despite being too large we still need to set this in order that we can + // avoid drawing preview if necessary when minorAxisDistance is varied + minorAxisDistance = TrimPrecision(value); + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + if (majorAxisDistance > MajorAxisLimit) + { + // Despite being too large we still need to set this in order that we can + // avoid drawing preview if necessary when minorAxisDistance is varied + minorAxisDistance = TrimPrecision(value); + ClearTempGraphics(); + return; + } + minorAxisDistance = TrimPrecision(value); @@ -162,6 +181,16 @@ public double MajorAxisDistance if (value < 0.0) throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); + double distanceInMeters = ConvertFromTo(LineDistanceType, DistanceTypes.Meters, value); + if (distanceInMeters > MajorAxisLimit) + { + // Despite being too large we still need to set this in order that we can + // avoid drawing preview if necessary when minorAxisDistance is varied + majorAxisDistance = TrimPrecision(value); + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + majorAxisDistance = TrimPrecision(value); Point2 = UpdateFeedback(Point1, MajorAxisDistance); @@ -170,6 +199,9 @@ public double MajorAxisDistance RaisePropertyChanged(() => MajorAxisDistance); RaisePropertyChanged(() => MajorAxisDistanceString); + + // Trigger validation to clear error messages as necessary + RaisePropertyChanged(() => LineDistanceType); } } @@ -214,6 +246,8 @@ public double Azimuth { if (value < 0.0) throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); + if (AzimuthType == AzimuthTypes.Degrees && value > 360.0) + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); azimuth = value; RaisePropertyChanged(() => Azimuth); @@ -275,6 +309,25 @@ internal override void OnEnterKeyCommand(object obj) #region Overriden Functions + public override DistanceTypes LineDistanceType + { + get + { + return base.LineDistanceType; + } + set + { + // Prevent graphical glitches from excessively high inputs + base.LineDistanceType = value; + double distanceInMeters = ConvertFromTo(value, DistanceTypes.Meters, MajorAxisDistance); + if (distanceInMeters > MajorAxisLimit) + { + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + } + } + /// /// Overrides TabBaseViewModel CreateMapElement /// diff --git a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/EllipseView.xaml b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/EllipseView.xaml index 84094def..99b940b0 100644 --- a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/EllipseView.xaml +++ b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/EllipseView.xaml @@ -144,11 +144,11 @@ - + Mode=TwoWay, ValidatesOnExceptions=True}"> Date: Fri, 17 Feb 2017 11:49:10 +0000 Subject: [PATCH 26/96] Added tests for Ellipse fix for #198 --- .../ArcMapAddinDistanceAndDirectionTests.cs | 18 ++++++++++++++++++ .../ViewModels/EllipseViewModel.cs | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs index 9c0c9bdc..c22ec3b9 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs @@ -345,6 +345,24 @@ public void EllipseViewModel_ThrowsException6() ellipseVM.Azimuth = -1; } + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void EllipseViewModel_ThrowsException7() + { + var ellipseVM = new EllipseViewModel(); + + ellipseVM.Distance = ellipseVM.MajorAxisLimit + 1; + } + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void EllipseViewModel_ThrowsException8() + { + var ellipseVM = new EllipseViewModel(); + + ellipseVM.LineDistanceType = DistanceTypes.Meters; + ellipseVM.Distance = ellipseVM.MajorAxisLimit; + ellipseVM.LineDistanceType = DistanceTypes.Miles; + } #endregion Ellipse View Model diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs index 5dea6764..64b9e0a1 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs @@ -35,7 +35,7 @@ public EllipseViewModel() #region Properties - private double MajorAxisLimit = 20000000; + public double MajorAxisLimit = 20000000; public IPoint CenterPoint { get; set; } public ISymbol FeedbackSymbol { get; set; } From 51ee6b96523e2c08a2897daaabe3627e47837ab3 Mon Sep 17 00:00:00 2001 From: Thargoids Date: Fri, 17 Feb 2017 16:27:39 +0000 Subject: [PATCH 27/96] Fix for Range tab in issue #214 --- .../ArcMapAddinDistanceAndDirectionTests.cs | 26 ++++++++- .../ViewModels/CircleViewModel.cs | 6 +- .../ViewModels/RangeViewModel.cs | 55 +++++++++++++++++++ .../Views/RangeView.xaml | 4 +- 4 files changed, 85 insertions(+), 6 deletions(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs index fb197446..71fb89cb 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs @@ -34,7 +34,7 @@ public static void MyClassInitialize(TestContext testContext) bool blnBoundToRuntime = ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); Assert.IsTrue(blnBoundToRuntime, "Not bound to runtime"); IAoInitialize aoInitialize = new AoInitializeClass(); - aoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeBasic); + aoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeStandard); } #region Lines View Model @@ -377,7 +377,7 @@ public void EllipseViewModel_ThrowsException7() { var ellipseVM = new EllipseViewModel(); - ellipseVM.Distance = ellipseVM.MajorAxisLimit + 1; + ellipseVM.MajorAxisDistance = ellipseVM.MajorAxisLimit + 1; } [TestMethod] [ExpectedException(typeof(ArgumentException))] @@ -386,7 +386,7 @@ public void EllipseViewModel_ThrowsException8() var ellipseVM = new EllipseViewModel(); ellipseVM.LineDistanceType = DistanceTypes.Meters; - ellipseVM.Distance = ellipseVM.MajorAxisLimit; + ellipseVM.MajorAxisDistance = ellipseVM.MajorAxisLimit; ellipseVM.LineDistanceType = DistanceTypes.Miles; } @@ -426,6 +426,26 @@ public void RangeViewModel_ThrowsException4() rangeVM.DistanceString = "esri"; } + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void RangeViewModel_ThrowsException5() + { + var rangeVM = new RangeViewModel(); + + rangeVM.Distance = 20000001; + } + + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void RangeViewModel_ThrowsException6() + { + var rangeVM = new RangeViewModel(); + + rangeVM.LineDistanceType = DistanceTypes.Meters; + rangeVM.Distance = 20000000; + rangeVM.LineDistanceType = DistanceTypes.Miles; + } + [TestMethod] public void RangeViewModel() { diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs index c252333b..6da00a77 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs @@ -441,7 +441,11 @@ public override DistanceTypes LineDistanceType throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } - UpdateFeedbackWithGeoCircle(); + // Avoid null reference exception during automated testing + if (ArcMap.Application != null) + { + UpdateFeedbackWithGeoCircle(); + } } } diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/RangeViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/RangeViewModel.cs index 90a2b50f..a7904734 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/RangeViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/RangeViewModel.cs @@ -35,6 +35,8 @@ public RangeViewModel() #region Properties + private double DistanceLimit = 20000000; + private bool isInteractive = false; public bool IsInteractive { @@ -74,6 +76,59 @@ public override bool IsToolActive } } + DistanceTypes lineDistanceType = DistanceTypes.Meters; + /// + /// Property for the distance type + /// + public override DistanceTypes LineDistanceType + { + get { return lineDistanceType; } + set + { + lineDistanceType = value; + + double distanceInMeters = ConvertFromTo(value, DistanceTypes.Meters, Distance); + if (distanceInMeters > DistanceLimit) + { + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + + UpdateFeedback(); + RaisePropertyChanged(() => Distance); + RaisePropertyChanged(() => DistanceString); + } + } + + double distance = 0.0; + /// + /// Property for the distance/length + /// + public override double Distance + { + get { return distance; } + set + { + if (value < 0.0) + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); + + distance = value; + + // Prevent graphical glitches from excessively high inputs + double distanceInMeters = ConvertFromTo(LineDistanceType, DistanceTypes.Meters, value); + if (distanceInMeters > DistanceLimit) + { + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + + DistanceString = distance.ToString("G"); + RaisePropertyChanged(() => Distance); + RaisePropertyChanged(() => DistanceString); + RaisePropertyChanged(() => LineDistanceType); + } + } + // keep track of the max distance for drawing of radials in interactive mode double maxDistance = 0.0; diff --git a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/RangeView.xaml b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/RangeView.xaml index 71d1eb3f..d6c57b35 100644 --- a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/RangeView.xaml +++ b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/RangeView.xaml @@ -120,12 +120,12 @@ - + Mode=TwoWay, ValidatesOnExceptions=True}"> Date: Fri, 17 Feb 2017 16:29:36 +0000 Subject: [PATCH 28/96] License --- .../ArcMapAddinDistanceAndDirectionTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs index 71fb89cb..b28ed360 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs @@ -34,7 +34,7 @@ public static void MyClassInitialize(TestContext testContext) bool blnBoundToRuntime = ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); Assert.IsTrue(blnBoundToRuntime, "Not bound to runtime"); IAoInitialize aoInitialize = new AoInitializeClass(); - aoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeStandard); + aoInitialize.Initialize(esriLicenseProductCode.esriLicenseProductCodeBasic); } #region Lines View Model From 5a093b5107ea58804df8947d33d7f8326f078cc5 Mon Sep 17 00:00:00 2001 From: Thargoids Date: Mon, 20 Feb 2017 10:45:51 +0000 Subject: [PATCH 29/96] Fixed #207 for ArcMap. Matching Pro fix pending --- .../ViewModels/CircleViewModel.cs | 89 ++++++++++++++++--- .../Views/CircleView.xaml | 8 +- 2 files changed, 77 insertions(+), 20 deletions(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs index 6da00a77..f788b372 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs @@ -81,7 +81,7 @@ public TimeUnits TimeUnit double distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); if (distanceInMeters > DistanceLimit) { - RaisePropertyChanged(() => TravelTime); + RaisePropertyChanged(() => TravelTimeString); UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); ClearTempGraphics(); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); @@ -90,9 +90,10 @@ public TimeUnits TimeUnit UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, true); // Trigger validation to clear error messages as necessary + RaisePropertyChanged(() => RateTimeUnit); RaisePropertyChanged(() => TimeUnit); - RaisePropertyChanged(() => TravelTime); - RaisePropertyChanged(() => TravelRate); + RaisePropertyChanged(() => TravelRateString); + RaisePropertyChanged(() => TravelTimeString); } } @@ -144,6 +145,36 @@ private double TravelRateInSeconds } } + string travelTimeString; + /// + /// String of time display + /// + public string TravelTimeString + { + get + { + return TravelTime.ToString("G"); + } + set + { + // lets avoid an infinite loop here + if (string.Equals(travelTimeString, value)) + return; + + // divide the manual input by 2 + double t = 0.0; + if (double.TryParse(value, out t)) + { + TravelTime = t; + } + else + { + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + } + } + double travelTime = 0.0; /// /// Property for time display @@ -169,7 +200,7 @@ public double TravelTime double distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); if (distanceInMeters > DistanceLimit) { - RaisePropertyChanged(() => TravelTime); + RaisePropertyChanged(() => TravelTimeString); UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); ClearTempGraphics(); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); @@ -177,12 +208,12 @@ public double TravelTime // we need to make sure we are in the same units as the Distance property before setting UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, true); - RaisePropertyChanged(() => TravelTime); // Trigger validation to clear error messages as necessary - RaisePropertyChanged(() => TravelRate); RaisePropertyChanged(() => RateTimeUnit); RaisePropertyChanged(() => TimeUnit); + RaisePropertyChanged(() => TravelRateString); + RaisePropertyChanged(() => TravelTimeString); } } @@ -196,6 +227,36 @@ private void UpdateDistance(double distance, DistanceTypes fromDistanceType, boo } } + string travelRateString; + /// + /// String of rate display + /// + public string TravelRateString + { + get + { + return TravelRate.ToString("G"); + } + set + { + // lets avoid an infinite loop here + if (string.Equals(travelRateString, value)) + return; + + // divide the manual input by 2 + double t = 0.0; + if (double.TryParse(value, out t)) + { + TravelRate = t; + } + else + { + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + } + } + double travelRate = 0.0; /// /// Property of rate display @@ -221,16 +282,16 @@ public double TravelRate if (distanceInMeters > DistanceLimit) { UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); - RaisePropertyChanged(() => TravelRate); + RaisePropertyChanged(() => TravelRateString); ClearTempGraphics(); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, true); - RaisePropertyChanged(() => TravelRate); + RaisePropertyChanged(() => TravelRateString); // Trigger validation to clear error messages as necessary - RaisePropertyChanged(() => TravelTime); + RaisePropertyChanged(() => TravelTimeString); RaisePropertyChanged(() => RateTimeUnit); RaisePropertyChanged(() => TimeUnit); } @@ -275,7 +336,7 @@ public DistanceTypes RateUnit double distanceInMeters = ConvertFromTo(rateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); if (distanceInMeters > DistanceLimit) { - RaisePropertyChanged(() => TravelTime); + RaisePropertyChanged(() => TravelTimeString); UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); ClearTempGraphics(); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); @@ -306,7 +367,7 @@ public RateTimeTypes RateTimeUnit double distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); if (distanceInMeters > DistanceLimit) { - RaisePropertyChanged(() => TravelTime); + RaisePropertyChanged(() => TravelTimeString); UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); ClearTempGraphics(); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); @@ -316,8 +377,8 @@ public RateTimeTypes RateTimeUnit // Trigger validation to clear error messages as necessary RaisePropertyChanged(() => RateTimeUnit); - RaisePropertyChanged(() => TravelTime); - RaisePropertyChanged(() => TravelRate); + RaisePropertyChanged(() => TravelTimeString); + RaisePropertyChanged(() => TravelRateString); } } @@ -468,7 +529,7 @@ internal override void OnNewMapPointEvent(object obj) double distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); if (distanceInMeters > DistanceLimit) { - RaisePropertyChanged(() => TravelTime); + RaisePropertyChanged(() => TravelTimeString); UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); ClearTempGraphics(); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); diff --git a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml index 15b57d44..35b4a2fc 100644 --- a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml +++ b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml @@ -124,9 +124,7 @@ Text="{x:Static prop:Resources.LabelTime}" /> @@ -159,9 +157,7 @@ Text="{x:Static prop:Resources.LabelRate}" /> From c1f64a0b4a8a7665a412de37d03f8fa35c27dc50 Mon Sep 17 00:00:00 2001 From: Thargoids Date: Mon, 20 Feb 2017 12:02:20 +0000 Subject: [PATCH 30/96] Fixes for Circle distance exception functionality --- .../ViewModels/CircleViewModel.cs | 51 +++++- .../Views/CircleView.xaml | 4 +- .../ViewModels/ProCircleViewModel.cs | 156 ++++++++++++++++-- 3 files changed, 195 insertions(+), 16 deletions(-) diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs index f788b372..1d0c36c3 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs @@ -84,6 +84,9 @@ public TimeUnits TimeUnit RaisePropertyChanged(() => TravelTimeString); UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } @@ -170,6 +173,9 @@ public string TravelTimeString else { ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } } @@ -191,6 +197,9 @@ public double TravelTime { UpdateFeedbackWithGeoCircle(); ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); } @@ -203,6 +212,9 @@ public double TravelTime RaisePropertyChanged(() => TravelTimeString); UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } @@ -219,7 +231,10 @@ public double TravelTime private void UpdateDistance(double distance, DistanceTypes fromDistanceType, bool belowLimit) { - Distance = ConvertFromTo(fromDistanceType, LineDistanceType, distance); + if (CircleType == CircleFromTypes.Diameter) + Distance = ConvertFromTo(fromDistanceType, LineDistanceType, distance) * 2.0; + else + Distance = ConvertFromTo(fromDistanceType, LineDistanceType, distance); if (belowLimit) { @@ -252,6 +267,9 @@ public string TravelRateString else { ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } } @@ -272,6 +290,9 @@ public double TravelRate if (value < 0.0) { ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); } @@ -284,6 +305,9 @@ public double TravelRate UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); RaisePropertyChanged(() => TravelRateString); ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } @@ -339,6 +363,9 @@ public DistanceTypes RateUnit RaisePropertyChanged(() => TravelTimeString); UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } @@ -370,6 +397,9 @@ public RateTimeTypes RateTimeUnit RaisePropertyChanged(() => TravelTimeString); UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } @@ -444,6 +474,9 @@ public override string DistanceString if (distanceInMeters > DistanceLimit) { ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } @@ -452,8 +485,14 @@ public override string DistanceString else { ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } + + // Trigger update to clear exception highlighting if necessary + RaisePropertyChanged(() => LineDistanceType); } } @@ -499,6 +538,9 @@ public override DistanceTypes LineDistanceType if (distanceInMeters > DistanceLimit) { ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } @@ -532,6 +574,9 @@ internal override void OnNewMapPointEvent(object obj) RaisePropertyChanged(() => TravelTimeString); UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } @@ -578,7 +623,9 @@ private void UpdateFeedbackWithGeoCircle() if (construct != null) { ClearTempGraphics(); - AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); construct.ConstructGeodesicCircle(Point1, GetLinearUnit(), Distance, esriCurveDensifyMethod.esriCurveDensifyByAngle, 0.45); Point2 = (construct as IPolyline).ToPoint; var color = new RgbColorClass() as IColor; diff --git a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml index 35b4a2fc..1754ca5c 100644 --- a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml +++ b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml @@ -101,12 +101,12 @@ - + Mode=TwoWay, ValidatesOnExceptions=True}" >

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⋙B}5{7BDmao4Wi&R?(^^} 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 literal 0 HcmV?d00001 diff --git a/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.PlatformServices.XML b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.PlatformServices.XML new file mode 100644 index 00000000..fcb42c0c --- /dev/null +++ b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.PlatformServices.XML @@ -0,0 +1,378 @@ + + + + System.Reactive.PlatformServices + + + +