diff --git a/README.md b/README.md index 6b86da74..0c4681e1 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 @@ -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 Language: C#) +[](Esri Tags: Military Analyst Defense ArcGIS ArcObjects .NET WPF ArcGISSolutions ArcMap ArcPro Add-In Military-Tools-for-ArcGIS) +[](Esri Language: C-Sharp) 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/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs index 8fe23dd2..a99cdcf2 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection.Tests/ArcMapAddinDistanceAndDirectionTests.cs @@ -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 @@ -170,6 +189,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() { @@ -184,6 +281,16 @@ 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); + + circleVM.CircleType = CircleFromTypes.Diameter; + Assert.AreEqual(circleVM.DistanceString, "1000"); } #endregion Circle View Model @@ -267,6 +374,24 @@ public void EllipseViewModel_ThrowsException6() ellipseVM.Azimuth = -1; } + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void EllipseViewModel_ThrowsException7() + { + var ellipseVM = new EllipseViewModel(); + + ellipseVM.MajorAxisDistance = ellipseVM.MajorAxisLimit + 1; + } + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void EllipseViewModel_ThrowsException8() + { + var ellipseVM = new EllipseViewModel(); + + ellipseVM.LineDistanceType = DistanceTypes.Meters; + ellipseVM.MajorAxisDistance = ellipseVM.MajorAxisLimit; + ellipseVM.LineDistanceType = DistanceTypes.Miles; + } #endregion Ellipse View Model @@ -304,6 +429,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/Config.esriaddinx b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Config.esriaddinx index 362643bc..09deacfa 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.1 Images\ArcMapAddinDistanceAndDirection.png Esri Esri - 1/25/2016 + 6/1/2017 @@ -23,4 +23,4 @@ - \ No newline at end of file + 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/Models/FeatureClassUtils.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Models/FeatureClassUtils.cs index c6acd840..5db640cd 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Models/FeatureClassUtils.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Models/FeatureClassUtils.cs @@ -145,18 +145,130 @@ public IFeatureClass CreateFCOutput(string outputPath, SaveAsType saveAsType, Li DeleteFeatureClass(fWorkspace, fcName); } - fc = CreateFeatureClass(fWorkspace, fcName, isGraphicLineOrRangeRing); + fc = CreateFeatureClass(fWorkspace, fcName, graphicsList, isGraphicLineOrRangeRing); foreach (Graphic graphic in graphicsList) { + if (graphic.Attributes == null) + continue; IFeature feature = fc.CreateFeature(); if (graphic.GraphicType != GraphicTypes.Line && graphic.GraphicType != GraphicTypes.RangeRing) feature.Shape = PolylineToPolygon(graphic.Geometry); else feature.Shape = graphic.Geometry; - - feature.Store(); + + switch (graphic.GraphicType.ToString()) + { + case "Line": + { + System.Object dist; + System.Object angle; + System.Object angleunit; + System.Object ox; + System.Object oy; + System.Object dx; + System.Object dy; + System.Object distunit; + + graphic.Attributes.TryGetValue("distance", out dist); + graphic.Attributes.TryGetValue("distanceunit", out distunit); + graphic.Attributes.TryGetValue("startx", out ox); + graphic.Attributes.TryGetValue("starty", out oy); + graphic.Attributes.TryGetValue("endx", out dx); + graphic.Attributes.TryGetValue("endy", out dy); + graphic.Attributes.TryGetValue("angle", out angle); + graphic.Attributes.TryGetValue("angleunit", out angleunit); + feature.set_Value(feature.Fields.FindField("Distance"), dist); + feature.set_Value(feature.Fields.FindField("DistanceUnit"), distunit); + feature.set_Value(feature.Fields.FindField("OriginX"), ox); + feature.set_Value(feature.Fields.FindField("OriginY"), oy); + feature.set_Value(feature.Fields.FindField("DestinationX"), dx); + feature.set_Value(feature.Fields.FindField("DestinationY"), dy); + feature.set_Value(feature.Fields.FindField("Angle"), angle); + feature.set_Value(feature.Fields.FindField("AngleUnit"), angleunit); + feature.Store(); + break; + } + case "Circle": + { + System.Object radius; + System.Object disttype; + System.Object distunit; + System.Object centerx; + System.Object centery; + + graphic.Attributes.TryGetValue("radius", out radius); + graphic.Attributes.TryGetValue("distanceunit", out distunit); + graphic.Attributes.TryGetValue("disttype", out disttype); + graphic.Attributes.TryGetValue("centerx", out centerx); + graphic.Attributes.TryGetValue("centery", out centery); + + feature.set_Value(feature.Fields.FindField("Distance"), radius); + feature.set_Value(feature.Fields.FindField("DistanceUnit"), distunit); + feature.set_Value(feature.Fields.FindField("DistanceType"), disttype); + feature.set_Value(feature.Fields.FindField("CenterX"), centerx); + feature.set_Value(feature.Fields.FindField("CenterY"), centery); + + feature.Store(); + break; + } + case "Ellipse": + { + System.Object majoraxis; + System.Object minoraxis; + System.Object angle; + System.Object distunit; + System.Object centerx; + System.Object centery; + System.Object angleunit; + + graphic.Attributes.TryGetValue("majoraxis", out majoraxis); + graphic.Attributes.TryGetValue("minoraxis", out minoraxis); + graphic.Attributes.TryGetValue("azimuth", out angle); + graphic.Attributes.TryGetValue("distanceunit", out distunit); + graphic.Attributes.TryGetValue("centerx", out centerx); + graphic.Attributes.TryGetValue("centery", out centery); + graphic.Attributes.TryGetValue("angleunit", out angleunit); + + feature.set_Value(feature.Fields.FindField("MajorAxis"), majoraxis); + feature.set_Value(feature.Fields.FindField("MinorAxis"), minoraxis); + feature.set_Value(feature.Fields.FindField("DistanceUnit"), distunit); + feature.set_Value(feature.Fields.FindField("Angle"), angle); + feature.set_Value(feature.Fields.FindField("CenterX"), centerx); + feature.set_Value(feature.Fields.FindField("CenterY"), centery); + feature.set_Value(feature.Fields.FindField("AngleUnit"), angleunit); + + feature.Store(); + break; + } + case "RangeRing": + { + + System.Object rings; + System.Object distance; + System.Object radials; + System.Object distunit; + System.Object centerx; + System.Object centery; + + graphic.Attributes.TryGetValue("rings", out rings); + graphic.Attributes.TryGetValue("distance", out distance); + graphic.Attributes.TryGetValue("radials", out radials); + graphic.Attributes.TryGetValue("distanceunit", out distunit); + graphic.Attributes.TryGetValue("centerx", out centerx); + graphic.Attributes.TryGetValue("centery", out centery); + + feature.set_Value(feature.Fields.FindField("Rings"), rings); + feature.set_Value(feature.Fields.FindField("Distance"), distance); + feature.set_Value(feature.Fields.FindField("Radials"), radials); + feature.set_Value(feature.Fields.FindField("DistanceUnit"), distunit); + feature.set_Value(feature.Fields.FindField("CenterX"), centerx); + feature.set_Value(feature.Fields.FindField("CenterY"), centery); + feature.Store(); + break; + } + } } } else if (saveAsType == SaveAsType.Shapefile) @@ -249,18 +361,327 @@ private IFeatureClass ExportToShapefile(string fileNamePath, List graph fieldEdit.GeometryDef_2 = geomDef; fieldsEdit.AddField(field); + string graphicsType = graphicsList[0].GraphicType.ToString(); + switch(graphicsType) + { + case "Line": + { + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "Distance"; + fieldEdit.AliasName_2 = "Geodetic Distance"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "DistUnit"; + fieldEdit.AliasName_2 = "Distance Unit"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeString; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "OriginX"; + fieldEdit.AliasName_2 = "Origin X"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "OriginY"; + fieldEdit.AliasName_2 = "Origin Y"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "DestX"; + fieldEdit.AliasName_2 = "Dest X"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "DestY"; + fieldEdit.AliasName_2 = "Dest Y"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "Angle"; + fieldEdit.AliasName_2 = "Angle"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "AngleUnit"; + fieldEdit.AliasName_2 = "Angle Unit"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeString; + fieldsEdit.AddField(field); + + break; + } + case "Circle": + { + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "Distance"; + fieldEdit.AliasName_2 = "Distance"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "DistUnit"; + fieldEdit.AliasName_2 = "Distance Unit"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeString; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "DistType"; + fieldEdit.AliasName_2 = "Distance Type"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeString; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "CenterX"; + fieldEdit.AliasName_2 = "Center X"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "CenterY"; + fieldEdit.AliasName_2 = "Center Y"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + break; + } + case "Ellipse": + { + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "MajAxis"; + fieldEdit.AliasName_2 = "Major Axis"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "MinAxis"; + fieldEdit.AliasName_2 = "Minor Axis"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "DistUnit"; + fieldEdit.AliasName_2 = "Distance Unit"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeString; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "CenterX"; + fieldEdit.AliasName_2 = "Center X"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "CenterY"; + fieldEdit.AliasName_2 = "Center Y"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "Angle"; + fieldEdit.AliasName_2 = "Angle"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "AngleUnit"; + fieldEdit.AliasName_2 = "Angle Unit"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeString; + fieldsEdit.AddField(field); + + break; + } + case "RangeRing": + { + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "Rings"; + fieldEdit.AliasName_2 = "Rings"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "Distance"; + fieldEdit.AliasName_2 = "Geodetic Distance"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "DistUnit"; + fieldEdit.AliasName_2 = "Distance Unit"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeString; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "Radials"; + fieldEdit.AliasName_2 = "Radials"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "CenterX"; + fieldEdit.AliasName_2 = "Center X"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + field = new FieldClass(); + fieldEdit = (IFieldEdit)field; + fieldEdit.Name_2 = "CenterY"; + fieldEdit.AliasName_2 = "Center Y"; + fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; + fieldsEdit.AddField(field); + + break; + } + } featClass = featureWorkspace.CreateFeatureClass(nameOfShapeFile, fields, null, null, esriFeatureType.esriFTSimple, shapeFieldName, ""); foreach (Graphic graphic in graphicsList) { + if (graphic.Attributes == null) + continue; IFeature feature = featClass.CreateFeature(); if (polyLineFC) feature.Shape = graphic.Geometry; else feature.Shape = PolylineToPolygon(graphic.Geometry); - + switch (graphic.GraphicType.ToString()) + { + case "Line": + { + System.Object dist; + System.Object angle; + System.Object angleunit; + System.Object ox; + System.Object oy; + System.Object dx; + System.Object dy; + System.Object distunit; + + graphic.Attributes.TryGetValue("distance", out dist); + graphic.Attributes.TryGetValue("distanceunit", out distunit); + graphic.Attributes.TryGetValue("startx", out ox); + graphic.Attributes.TryGetValue("starty", out oy); + graphic.Attributes.TryGetValue("endx", out dx); + graphic.Attributes.TryGetValue("endy", out dy); + graphic.Attributes.TryGetValue("angle", out angle); + graphic.Attributes.TryGetValue("angleunit", out angleunit); + feature.set_Value(feature.Fields.FindField("Distance"), dist); + feature.set_Value(feature.Fields.FindField("DistUnit"), distunit); + feature.set_Value(feature.Fields.FindField("OriginX"), ox); + feature.set_Value(feature.Fields.FindField("OriginY"), oy); + feature.set_Value(feature.Fields.FindField("DestX"), dx); + feature.set_Value(feature.Fields.FindField("DestY"), dy); + feature.set_Value(feature.Fields.FindField("Angle"), angle); + feature.set_Value(feature.Fields.FindField("AngleUnit"), angleunit); + break; + } + case "Circle": + { + System.Object radius; + System.Object disttype; + System.Object distunit; + System.Object centerx; + System.Object centery; + + graphic.Attributes.TryGetValue("radius", out radius); + graphic.Attributes.TryGetValue("distanceunit", out distunit); + graphic.Attributes.TryGetValue("disttype", out disttype); + graphic.Attributes.TryGetValue("centerx", out centerx); + graphic.Attributes.TryGetValue("centery", out centery); + + feature.set_Value(feature.Fields.FindField("Distance"), radius); + feature.set_Value(feature.Fields.FindField("DistUnit"), distunit); + feature.set_Value(feature.Fields.FindField("DistType"), disttype); + feature.set_Value(feature.Fields.FindField("CenterX"), centerx); + feature.set_Value(feature.Fields.FindField("CenterY"), centery); + + break; + } + case "Ellipse": + { + System.Object majoraxis; + System.Object minoraxis; + System.Object angle; + System.Object distunit; + System.Object centerx; + System.Object centery; + System.Object angleunit; + + graphic.Attributes.TryGetValue("majoraxis", out majoraxis); + graphic.Attributes.TryGetValue("minoraxis", out minoraxis); + graphic.Attributes.TryGetValue("azimuth", out angle); + graphic.Attributes.TryGetValue("distanceunit", out distunit); + graphic.Attributes.TryGetValue("centerx", out centerx); + graphic.Attributes.TryGetValue("centery", out centery); + graphic.Attributes.TryGetValue("angleunit", out angleunit); + + feature.set_Value(feature.Fields.FindField("MajAxis"), majoraxis); + feature.set_Value(feature.Fields.FindField("MinAxis"), minoraxis); + feature.set_Value(feature.Fields.FindField("DistUnit"), distunit); + feature.set_Value(feature.Fields.FindField("Angle"), angle); + feature.set_Value(feature.Fields.FindField("CenterX"), centerx); + feature.set_Value(feature.Fields.FindField("CenterY"), centery); + feature.set_Value(feature.Fields.FindField("AngleUnit"), angleunit); + break; + } + case "RangeRing": + { + System.Object rings; + System.Object distance; + System.Object radials; + System.Object distunit; + System.Object centerx; + System.Object centery; + + graphic.Attributes.TryGetValue("rings", out rings); + graphic.Attributes.TryGetValue("distance", out distance); + graphic.Attributes.TryGetValue("radials", out radials); + graphic.Attributes.TryGetValue("distanceunit", out distunit); + graphic.Attributes.TryGetValue("centerx", out centerx); + graphic.Attributes.TryGetValue("centery", out centery); + + feature.set_Value(feature.Fields.FindField("Rings"), rings); + feature.set_Value(feature.Fields.FindField("Distance"), distance); + feature.set_Value(feature.Fields.FindField("Radials"), radials); + feature.set_Value(feature.Fields.FindField("DistUnit"), distunit); + feature.set_Value(feature.Fields.FindField("CenterX"), centerx); + feature.set_Value(feature.Fields.FindField("CenterY"), centery); + break; + } + } feature.Store(); } @@ -334,8 +755,9 @@ private void DeleteFeatureClass(IFeatureWorkspace fWorkspace, string fcName) /// IFeatureWorkspace /// Name of the featureclass /// IFeatureClass - private IFeatureClass CreateFeatureClass(IFeatureWorkspace featWorkspace, string name, bool polyLineFC) + private IFeatureClass CreateFeatureClass(IFeatureWorkspace featWorkspace, string name, List graphicsList, bool polyLineFC) { + string graphicsType = graphicsList[0].GraphicType.ToString(); IFieldsEdit pFldsEdt = new FieldsClass(); IFieldEdit pFldEdt = new FieldClass(); @@ -361,6 +783,182 @@ private IFeatureClass CreateFeatureClass(IFeatureWorkspace featWorkspace, string pFldEdt.GeometryDef_2 = pGeoDef; pFldsEdt.AddField(pFldEdt); + switch (graphicsType) + { + case "Line": + { + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "Distance"; + pFldEdt.AliasName_2 = "Geodetic Distance"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "DistanceUnit"; + pFldEdt.AliasName_2 = "Distance Unit"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeString; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "OriginX"; + pFldEdt.AliasName_2 = "Origin X"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "OriginY"; + pFldEdt.AliasName_2 = "Origin Y"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "DestinationX"; + pFldEdt.AliasName_2 = "Destination X"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "DestinationY"; + pFldEdt.AliasName_2 = "Destination Y"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "Angle"; + pFldEdt.AliasName_2 = "Angle"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "AngleUnit"; + pFldEdt.AliasName_2 = "Angle Unit"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeString; + pFldsEdt.AddField(pFldEdt); + + break; + } + case "Circle": + { + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "Distance"; + pFldEdt.AliasName_2 = "Distance"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "DistanceUnit"; + pFldEdt.AliasName_2 = "Distance Unit"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeString; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "DistanceType"; + pFldEdt.AliasName_2 = "Distance Type"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeString; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "CenterX"; + pFldEdt.AliasName_2 = "Center X"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "CenterY"; + pFldEdt.AliasName_2 = "Center Y"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + break; + } + case "Ellipse": + { + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "MajorAxis"; + pFldEdt.AliasName_2 = "Major Axis"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "MinorAxis"; + pFldEdt.AliasName_2 = "Minor Axis"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "DistanceUnit"; + pFldEdt.AliasName_2 = "Distance Unit"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeString; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "CenterX"; + pFldEdt.AliasName_2 = "Center X"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "CenterY"; + pFldEdt.AliasName_2 = "Center Y"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "Angle"; + pFldEdt.AliasName_2 = "Angle"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "AngleUnit"; + pFldEdt.AliasName_2 = "Angle Unit"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeString; + pFldsEdt.AddField(pFldEdt); + + break; + } + case "RangeRing": + { + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "Rings"; + pFldEdt.AliasName_2 = "Rings"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeInteger; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "Distance"; + pFldEdt.AliasName_2 = "Distance"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeInteger; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "DistanceUnit"; + pFldEdt.AliasName_2 = "Distance Unit"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeString; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "Radials"; + pFldEdt.AliasName_2 = "Radials"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "CenterX"; + pFldEdt.AliasName_2 = "Center X"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + pFldEdt = new FieldClass(); + pFldEdt.Name_2 = "CenterY"; + pFldEdt.AliasName_2 = "Center Y"; + pFldEdt.Type_2 = esriFieldType.esriFieldTypeDouble; + pFldsEdt.AddField(pFldEdt); + + break; + } + } + IFeatureClass pFClass = featWorkspace.CreateFeatureClass(name, pFldsEdt, null, null, esriFeatureType.esriFTSimple, "SHAPE", ""); return pFClass; diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Models/Graphic.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Models/Graphic.cs index af222697..6e047109 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Models/Graphic.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Models/Graphic.cs @@ -18,18 +18,20 @@ using DistanceAndDirectionLibrary; // Esri using ESRI.ArcGIS.Geometry; +using System.Collections.Generic; namespace ArcMapAddinDistanceAndDirection.Models { public class Graphic { - public Graphic(GraphicTypes _graphicType, string _uniqueid, IGeometry _geometry, TabBaseViewModel _model, bool _isTemp = false) + public Graphic(GraphicTypes _graphicType, string _uniqueid, IGeometry _geometry, TabBaseViewModel _model, bool _isTemp = false, IDictionary attributes = null) { GraphicType = _graphicType; UniqueId = _uniqueid; Geometry = _geometry; IsTemp = _isTemp; ViewModel = _model; + Attributes = attributes; } // properties @@ -58,6 +60,9 @@ public Graphic(GraphicTypes _graphicType, string _uniqueid, IGeometry _geometry, /// Property to determine what view the graphic was created in /// public TabBaseViewModel ViewModel { get; set; } - + /// + /// Property to set attributes for different geometries + /// + public IDictionary Attributes { get; set; } } } diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Properties/AssemblyInfo.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Properties/AssemblyInfo.cs index fd5dddf1..04ec90e2 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Properties/AssemblyInfo.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/Properties/AssemblyInfo.cs @@ -6,11 +6,11 @@ // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("ArcMapAddinDistanceAndDirection")] -[assembly: AssemblyDescription("")] +[assembly: AssemblyDescription("ArcMapAddinDistanceAndDirection")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("ESRI")] [assembly: AssemblyProduct("ArcMapAddinDistanceAndDirection")] -[assembly: AssemblyCopyright("Copyright © ESRI 2016")] +[assembly: AssemblyCopyright("Copyright © ESRI 2017")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("2.1.0")] +[assembly: AssemblyFileVersion("2.1.0")] diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs index e6fd6fd1..2faefafb 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/CircleViewModel.cs @@ -21,6 +21,7 @@ using DistanceAndDirectionLibrary; using ESRI.ArcGIS.ArcMapUI; using ESRI.ArcGIS.Carto; +using System.Collections.Generic; namespace ArcMapAddinDistanceAndDirection.ViewModels { @@ -37,6 +38,8 @@ public CircleViewModel() #region Properties + private double DistanceLimit = 20000000; + CircleFromTypes circleType = CircleFromTypes.Radius; /// /// Type of circle property @@ -51,12 +54,64 @@ public CircleFromTypes CircleType circleType = value; + if (!isDistanceCalcExpanded) + { + // We have to explicitly redo the graphics here because otherwise DistanceString has not changed + // and thus no graphics update will be triggered + double distanceInMeters = ConvertFromTo(LineDistanceType, DistanceTypes.Meters, Distance); + + if (distanceInMeters > DistanceLimit) + { + ClearTempGraphics(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + // 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, attributes: ptAttributes); + } + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + // Avoid null reference exception during automated testing + if (ArcMap.Application != null) + { + UpdateFeedbackWithGeoCircle(); + } + } + else + { + // We just want to update the value in the Radius / Diameter field + if (circleType == CircleFromTypes.Radius) + { + Distance = Distance / 2; + } + else + { + Distance = Distance * 2; + } + } + // reset distance RaisePropertyChanged(() => Distance); RaisePropertyChanged(() => DistanceString); } } + public override IPoint Point1 + { + get + { + return base.Point1; + } + set + { + base.Point1 = value; + + + UpdateFeedbackWithGeoCircle(); + } + } TimeUnits timeUnit = TimeUnits.Minutes; /// /// Type of time units @@ -75,9 +130,33 @@ 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(() => TravelTimeString); + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); + ClearTempGraphics(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + // 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, esriSimpleMarkerStyle.esriSMSCircle, esriRasterOpCode.esriROPNOP, ptAttributes); + } + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, true); + + // Trigger validation to clear error messages as necessary + RaisePropertyChanged(() => RateTimeUnit); RaisePropertyChanged(() => TimeUnit); + RaisePropertyChanged(() => TravelRateString); + RaisePropertyChanged(() => TravelTimeString); + RaisePropertyChanged(() => LineDistanceType); } } @@ -129,6 +208,46 @@ 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 + { + + TravelTime = 0.0; + ClearTempGraphics(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + // 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, esriSimpleMarkerStyle.esriSMSCircle, esriRasterOpCode.esriROPNOP, ptAttributes); + } + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEEnterValue); + } + } + } + double travelTime = 0.0; /// /// Property for time display @@ -141,22 +260,102 @@ public double TravelTime } set { + if (value < 0.0) + { + UpdateFeedbackWithGeoCircle(); + ClearTempGraphics(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + // 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, attributes: ptAttributes); + } throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); + } travelTime = value; + // Prevent graphical glitches from excessively high inputs + double distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + + if (distanceInMeters > DistanceLimit) + { + RaisePropertyChanged(() => TravelTimeString); + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); + ClearTempGraphics(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + // 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, attributes: ptAttributes); + } + 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); + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, true); - RaisePropertyChanged(() => TravelTime); + // Trigger validation to clear error messages as necessary + RaisePropertyChanged(() => RateTimeUnit); + RaisePropertyChanged(() => TimeUnit); + RaisePropertyChanged(() => TravelRateString); + RaisePropertyChanged(() => TravelTimeString); + RaisePropertyChanged(() => LineDistanceType); } } - 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(); + } + } + + 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(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + // 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, attributes: ptAttributes); + } + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEEnterValue); + } + } } double travelRate = 0.0; @@ -171,14 +370,49 @@ public double TravelRate } set { + if (value < 0.0) + { + ClearTempGraphics(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + // 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, attributes: ptAttributes); + } 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(() => TravelRateString); + ClearTempGraphics(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + // 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, attributes: ptAttributes); + } + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } - RaisePropertyChanged(() => TravelRate); + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, true); + RaisePropertyChanged(() => TravelRateString); + + // Trigger validation to clear error messages as necessary + RaisePropertyChanged(() => TravelTimeString); + RaisePropertyChanged(() => RateTimeUnit); + RaisePropertyChanged(() => TimeUnit); + RaisePropertyChanged(() => LineDistanceType); } } @@ -216,8 +450,26 @@ public DistanceTypes RateUnit } rateUnit = value; + + // Prevent graphical glitches from excessively high inputs + double distanceInMeters = ConvertFromTo(rateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + if (distanceInMeters > DistanceLimit) + { + RaisePropertyChanged(() => TravelTimeString); + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); + ClearTempGraphics(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + // 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, attributes: ptAttributes); + } + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } - UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit); + UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, true); RaisePropertyChanged(() => RateUnit); } @@ -238,9 +490,33 @@ 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(() => TravelTimeString); + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); + ClearTempGraphics(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + // 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, attributes: ptAttributes); + } + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, true); + + // Trigger validation to clear error messages as necessary RaisePropertyChanged(() => RateTimeUnit); + RaisePropertyChanged(() => TimeUnit); + RaisePropertyChanged(() => TravelTimeString); + RaisePropertyChanged(() => TravelRateString); + RaisePropertyChanged(() => LineDistanceType); } } @@ -262,28 +538,27 @@ public bool IsDistanceCalcExpanded { Reset(false); } - + ClearTempGraphics(); if (HasPoint1) - AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true, attributes: ptAttributes); + } + RaisePropertyChanged(() => IsDistanceCalcExpanded); } } /// - /// Distance is always the radius /// Update DistanceString for user - /// Do nothing for Radius mode, double the radius for Diameter mode /// public override string DistanceString { get { - if (CircleType == CircleFromTypes.Diameter) - { - return (Distance * 2.0).ToString("G"); - } - return base.DistanceString; } set @@ -291,22 +566,49 @@ public override string DistanceString // lets avoid an infinite loop here if (string.Equals(base.DistanceString, value)) return; - + // divide the manual input by 2 double d = 0.0; + if (double.TryParse(value, out d)) { - if (CircleType == CircleFromTypes.Diameter) - d /= 2.0; - + Distance = d; + double distanceInMeters = ConvertFromTo(LineDistanceType, DistanceTypes.Meters, Distance); + + if (distanceInMeters > DistanceLimit) + { + ClearTempGraphics(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + // 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, attributes: ptAttributes); + } + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + UpdateFeedbackWithGeoCircle(); } else { + ClearTempGraphics(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + // 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, attributes: ptAttributes); + } throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } + + // Trigger update to clear exception highlighting if necessary + RaisePropertyChanged(() => LineDistanceType); } } @@ -340,15 +642,31 @@ public override DistanceTypes LineDistanceType { var before = base.LineDistanceType; var temp = ConvertFromTo(before, value, Distance); - if (CircleType == CircleFromTypes.Diameter) - Distance = temp * 2.0; - else - Distance = temp; + Distance = temp; } base.LineDistanceType = value; + + double distanceInMeters = ConvertFromTo(value, DistanceTypes.Meters, Distance); + if (distanceInMeters > DistanceLimit) + { + ClearTempGraphics(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + // 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, attributes: ptAttributes); + } + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } - UpdateFeedbackWithGeoCircle(); + // Avoid null reference exception during automated testing + if (ArcMap.Application != null) + { + UpdateFeedbackWithGeoCircle(); + } } } @@ -367,7 +685,26 @@ 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(() => TravelTimeString); + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, false); + ClearTempGraphics(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + // 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, attributes: ptAttributes); + } + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, true); } } @@ -403,19 +740,38 @@ internal override void OnMouseMoveEvent(object obj) private void UpdateFeedbackWithGeoCircle() { - if (Point1 == null || Distance <= 0.0) + if (Point1 == null || Distance <= 0) return; - + var construct = new Polyline() as IConstructGeodetic; + if (construct != null) { ClearTempGraphics(); - 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; - this.AddGraphicToMap(construct as IGeometry, color, true, rasterOpCode: esriRasterOpCode.esriROPNotXOrPen); + IDictionary circleAttributes = new Dictionary(); + if (HasPoint1) + { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + circleAttributes.Add("centerx", Point1.X); + circleAttributes.Add("centery", Point1.Y); + // 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, attributes: ptAttributes); + + + circleAttributes.Add("radius", Distance); + circleAttributes.Add("disttype", CircleType.ToString()); + + construct.ConstructGeodesicCircle(Point1, GetLinearUnit(), Distance, esriCurveDensifyMethod.esriCurveDensifyByAngle, 0.45); + + Point2 = (construct as IPolyline).ToPoint; + var color = new RgbColorClass() as IColor; + this.AddGraphicToMap(construct as IGeometry, color, true, rasterOpCode: esriRasterOpCode.esriROPNotXOrPen, attributes: circleAttributes); + } } + + } #endregion @@ -459,6 +815,7 @@ private IGeometry CreateCircle() return null; } + // This section including UpdateDistance serves to handle Diameter appropriately var polyLine = new Polyline() as IPolyline; polyLine.SpatialReference = Point1.SpatialReference; var ptCol = polyLine as IPointCollection; @@ -473,8 +830,14 @@ private IGeometry CreateCircle() if (construct != null) { construct.ConstructGeodesicCircle(Point1, GetLinearUnit(), Distance, esriCurveDensifyMethod.esriCurveDensifyByAngle, 0.01); - //var color = new RgbColorClass() { Red = 255 } as IColor; - this.AddGraphicToMap(construct as IGeometry); + IDictionary circleAttributes = new Dictionary(); + circleAttributes.Add("radius", Distance); + circleAttributes.Add("disttype", CircleType.ToString()); + circleAttributes.Add("centerx", Point1.X); + circleAttributes.Add("centery", Point1.Y); + circleAttributes.Add("distanceunit", LineDistanceType.ToString()); + var color = new RgbColorClass() { Red = 255 } as IColor; + this.AddGraphicToMap(construct as IGeometry, color, attributes: circleAttributes); //Construct a polygon from geodesic polyline var newPoly = this.PolylineToPolygon((IPolyline)construct); @@ -483,26 +846,94 @@ private IGeometry CreateCircle() //Get centroid of polygon var area = newPoly as IArea; - // Ensure we use the correct distance, dependent on whether we are in Radius or Diameter mode - string distanceLabel; - if (circleType == CircleFromTypes.Radius) + + string unitLabel = ""; + int roundingFactor = 0; + // If Distance Calculator is in use, use the unit from the Rate combobox + // to label the circle + if (IsDistanceCalcExpanded) { - distanceLabel = Math.Round(Distance, 2).ToString("N2"); + // Select appropriate label and number of decimal places + switch (RateUnit) + { + case DistanceTypes.Feet: + case DistanceTypes.Meters: + case DistanceTypes.Yards: + unitLabel = RateUnit.ToString(); + roundingFactor = 0; + break; + case DistanceTypes.Miles: + case DistanceTypes.Kilometers: + unitLabel = RateUnit.ToString(); + roundingFactor = 2; + break; + case DistanceTypes.NauticalMile: + unitLabel = "Nautical Miles"; + roundingFactor = 2; + break; + default: + break; + } } + // Else Distance Calculator not in use, use the unit from the Radius / Diameter combobox + // to label the circle else { - distanceLabel = Math.Round((Distance * 2), 2).ToString("N2"); + // Select appropriate number of decimal places + switch (LineDistanceType) + { + case DistanceTypes.Feet: + case DistanceTypes.Meters: + case DistanceTypes.Yards: + unitLabel = RateUnit.ToString(); + roundingFactor = 0; + break; + case DistanceTypes.Miles: + case DistanceTypes.Kilometers: + unitLabel = RateUnit.ToString(); + roundingFactor = 2; + break; + case DistanceTypes.NauticalMile: + unitLabel = "Nautical Miles"; + roundingFactor = 2; + break; + default: + break; + } + + DistanceTypes dtVal = (DistanceTypes)LineDistanceType; + unitLabel = dtVal.ToString(); + } + + double convertedDistance = Distance; + // Distance is storing radius not diameter, so we have to double it to get the correct value + // for the label + // Only use Diameter when Distance Calculator is not in use + if (!IsDistanceCalcExpanded && circleType == CircleFromTypes.Diameter) + { + convertedDistance *= 2; + } + + string circleTypeLabel = circleType.ToString(); + string distanceLabel =""; + // Use the unit from Rate combobox if Distance Calculator is expanded + if (IsDistanceCalcExpanded) + { + convertedDistance = ConvertFromTo(LineDistanceType, RateUnit, convertedDistance); + distanceLabel = (TrimPrecision(convertedDistance, RateUnit, true)).ToString("N"+roundingFactor.ToString()); + // Always label with radius when Distance Calculator is expanded + circleTypeLabel = "Radius"; + } + else + { + distanceLabel = (TrimPrecision(convertedDistance, LineDistanceType, false)).ToString("N" + roundingFactor.ToString()); } //Add text using centroid point - //Use circleType to ensure our label contains either Radius or Diameter dependent on mode - DistanceTypes dtVal = (DistanceTypes)LineDistanceType; //Get line distance type this.AddTextToMap(area.Centroid, string.Format("{0}:{1} {2}", - circleType, + circleTypeLabel, distanceLabel, - dtVal.ToString())); - - + unitLabel)); } Point2 = null; diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs index 7ea3a63c..b1099f9b 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/EllipseViewModel.cs @@ -21,6 +21,7 @@ using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.Display; using DistanceAndDirectionLibrary; +using System.Collections.Generic; namespace ArcMapAddinDistanceAndDirection.ViewModels { @@ -35,6 +36,8 @@ public EllipseViewModel() #region Properties + public double MajorAxisLimit = 20000000; + public IPoint CenterPoint { get; set; } public ISymbol FeedbackSymbol { get; set; } @@ -63,6 +66,18 @@ public AzimuthTypes AzimuthType } } + public override IPoint Point1 + { + get + { + return base.Point1; + } + set + { + base.Point1 = value; + UpdateFeedback(); + } + } private IPoint point2 = null; public override IPoint Point2 { @@ -103,8 +118,25 @@ 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, false); + 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, false); + ClearTempGraphics(); + return; + } + - minorAxisDistance = value; + minorAxisDistance = TrimPrecision(value, false); UpdateFeedbackWithEllipse(); @@ -162,7 +194,17 @@ public double MajorAxisDistance if (value < 0.0) throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); - majorAxisDistance = value; + 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, false); + ClearTempGraphics(); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + + majorAxisDistance = TrimPrecision(value, false); Point2 = UpdateFeedback(Point1, MajorAxisDistance); @@ -170,6 +212,9 @@ public double MajorAxisDistance RaisePropertyChanged(() => MajorAxisDistance); RaisePropertyChanged(() => MajorAxisDistanceString); + + // Trigger validation to clear error messages as necessary + RaisePropertyChanged(() => LineDistanceType); } } @@ -214,6 +259,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 +322,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 /// @@ -312,8 +378,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); } @@ -341,8 +408,10 @@ private void UpdateFeedbackWithEllipse(bool HasMinorAxis = true) return; ClearTempGraphics(); - - AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true, esriSimpleMarkerStyle.esriSMSCircle, esriRasterOpCode.esriROPNOP, ptAttributes); var ellipticArc = new Polyline() as IConstructGeodetic; @@ -352,13 +421,18 @@ private void UpdateFeedbackWithEllipse(bool HasMinorAxis = true) if (minorAxis > MajorAxisDistance) minorAxis = MajorAxisDistance; - + ellipticArc.ConstructGeodesicEllipse(Point1, GetLinearUnit(), MajorAxisDistance, minorAxis, GetAzimuthAsDegrees(), esriCurveDensifyMethod.esriCurveDensifyByAngle, 0.45); var line = ellipticArc as IPolyline; + if (line != null) { + IDictionary ellipseAttributes = new Dictionary(); + ellipseAttributes.Add("majoraxis", MajorAxisDistance); + ellipseAttributes.Add("minoraxis", MinorAxisDistance); + ellipseAttributes.Add("azimuth", Azimuth); var color = new RgbColor() as IColor; - AddGraphicToMap(line as IGeometry, color, true, rasterOpCode: esriRasterOpCode.esriROPNotXOrPen); + AddGraphicToMap(line as IGeometry, color, true, rasterOpCode: esriRasterOpCode.esriROPNotXOrPen, attributes:ellipseAttributes ); } } @@ -389,7 +463,10 @@ internal override void OnNewMapPointEvent(object obj) Point1 = point; HasPoint1 = true; Point1Formatted = string.Empty; - AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + AddGraphicToMap( Point1, new RgbColor() { Green = 255 } as IColor, true, attributes: ptAttributes); } else if (!HasPoint2) @@ -581,7 +658,16 @@ private IGeometry DrawEllipse() var line = ellipticArc as IPolyline; if (line != null) { - AddGraphicToMap(line as IGeometry); + var color = new RgbColorClass() { Red = 255 } as IColor; + IDictionary ellipseAttributes = new Dictionary(); + ellipseAttributes.Add("majoraxis", MajorAxisDistance); + ellipseAttributes.Add("minoraxis", MinorAxisDistance); + ellipseAttributes.Add("azimuth", Azimuth); + ellipseAttributes.Add("centerx", Point1.X); + ellipseAttributes.Add("centery", Point1.Y); + ellipseAttributes.Add("distanceunit", LineDistanceType.ToString()); + ellipseAttributes.Add("angleunit", AzimuthType.ToString()); + AddGraphicToMap(line as IGeometry, color, attributes:ellipseAttributes); //Convert ellipse polyline to polygon var newPoly = PolylineToPolygon((IPolyline)ellipticArc); if (newPoly != null) @@ -591,20 +677,29 @@ private IGeometry DrawEllipse() //Add text using centroid point DistanceTypes dtVal = (DistanceTypes)LineDistanceType; //Get line distance type AzimuthTypes atVal = (AzimuthTypes)AzimuthType; //Get azimuth type + EllipseTypes ellipseType = EllipseType; + double majDist = majorAxisDistance; + double minDist = minorAxisDistance; + if (ellipseType == EllipseTypes.Full) + { + majDist = majorAxisDistance * 2; + minDist = minorAxisDistance * 2; + } if (area != null) { - AddTextToMap(area.Centroid, string.Format("{0}:{1} {2}{3}{4}:{5} {6}{7}{8}:{9} {10}", - "Major Axis", - Math.Round(majorAxisDistance,2), - dtVal.ToString(), - Environment.NewLine, - "Minor Axis", - Math.Round(minorAxisDistance,2), - dtVal.ToString(), - Environment.NewLine, - "Orientation Angle", - Math.Round(azimuth,2), - atVal.ToString())); + + AddTextToMap(area.Centroid, string.Format("{0}:{1} {2}{3}{4}:{5} {6}{7}{8}:{9} {10}", + "Major Axis", + Math.Round(majDist, 2), + dtVal.ToString(), + Environment.NewLine, + "Minor Axis", + Math.Round(minDist, 2), + dtVal.ToString(), + Environment.NewLine, + "Orientation Angle", + Math.Round(azimuth, 2), + atVal.ToString())); } } } diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs index da469bed..e47fe4c8 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/LinesViewModel.cs @@ -21,6 +21,7 @@ using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Display; using DistanceAndDirectionLibrary; +using System.Collections.Generic; namespace ArcMapAddinDistanceAndDirection.ViewModels { @@ -109,7 +110,7 @@ public override double Distance if (value < 0.0) throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); - distance = value; + distance = TrimPrecision(value, false); RaisePropertyChanged(() => Distance); if(LineFromType == LineFromTypes.BearingAndDistance) @@ -129,26 +130,37 @@ public double? Azimuth get { return azimuth; } set { - if (value < 0.0) - throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); + if ((value != null) && (value >= 0.0)) + azimuth = value; + else + azimuth = null; - azimuth = value; RaisePropertyChanged(() => Azimuth); - if (!azimuth.HasValue) - throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); - if (LineFromType == LineFromTypes.BearingAndDistance) { - // update feedback UpdateFeedback(); } + if ((value == null) || (value < 0.0)) + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); + if (LineAzimuthType == AzimuthTypes.Degrees) + { + if (value > 360 && LineAzimuthType == AzimuthTypes.Degrees) + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + else + { + if (value > 6400 && LineAzimuthType == AzimuthTypes.Mils) + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + AzimuthString = azimuth.Value.ToString("G"); RaisePropertyChanged(() => AzimuthString); } } string azimuthString = string.Empty; + public string AzimuthString { get { return azimuthString; } @@ -212,7 +224,10 @@ internal override void OnEnterKeyCommand(object obj) HasPoint2 = true; IGeometry geo = CreatePolyline(); IPolyline line = geo as IPolyline; - AddGraphicToMap(line); + IDictionary lineAttributes = new Dictionary(); + lineAttributes.Add("distance", Distance); + lineAttributes.Add("angle", (double)Azimuth); + AddGraphicToMap(line, attributes:lineAttributes); ResetPoints(); ClearTempGraphics(); base.OnEnterKeyCommand(obj); @@ -243,10 +258,21 @@ private IGeometry CreatePolyline() var linearUnit = srf3.CreateUnit((int)esriSRUnitType.esriSRUnit_Meter) as ILinearUnit; esriGeodeticType type = GetEsriGeodeticType(); IGeometry geo = Point1; - if(LineFromType == LineFromTypes.Points) + if (LineFromType == LineFromTypes.Points) construct.ConstructGeodeticLineFromPoints(GetEsriGeodeticType(), Point1, Point2, GetLinearUnit(), esriCurveDensifyMethod.esriCurveDensifyByDeviation, -1.0); else - construct.ConstructGeodeticLineFromDistance(type, Point1, GetLinearUnit(), Distance, (double)Azimuth, esriCurveDensifyMethod.esriCurveDensifyByDeviation,-1.0); + { + Double bearing = 0.0; + if(LineAzimuthType == AzimuthTypes.Mils) + { + bearing = GetAzimuthAsDegrees(); + } + else + { + bearing = (double)Azimuth; + } + construct.ConstructGeodeticLineFromDistance(type, Point1, GetLinearUnit(), Distance, bearing, esriCurveDensifyMethod.esriCurveDensifyByDeviation, -1.0); + } var mxdoc = ArcMap.Application.Document as IMxDocument; var av = mxdoc.FocusMap as IActiveView; if (LineFromType == LineFromTypes.Points) @@ -254,10 +280,18 @@ private IGeometry CreatePolyline() UpdateDistance(construct as IGeometry); UpdateAzimuth(construct as IGeometry); } - - //var color = new RgbColorClass() { Red = 255 } as IColor; - AddGraphicToMap(construct as IGeometry); + IDictionary lineAttributes = new Dictionary(); + lineAttributes.Add("distance", Distance); + lineAttributes.Add("distanceunit", LineDistanceType.ToString()); + lineAttributes.Add("angle", (double)Azimuth); + lineAttributes.Add("angleunit", LineAzimuthType.ToString()); + lineAttributes.Add("startx", Point1.X); + lineAttributes.Add("starty", Point1.Y); + lineAttributes.Add("endx", Point2.X); + lineAttributes.Add("endy", Point2.Y); + var color = new RgbColorClass() { Red = 255 } as IColor; + AddGraphicToMap(construct as IGeometry, color, attributes: lineAttributes); if (HasPoint1 && HasPoint2) { @@ -277,7 +311,7 @@ private IGeometry CreatePolyline() Environment.NewLine, "Angle", Math.Round(azimuth.Value,2), - atVal.ToString())); + atVal.ToString()), (double)Azimuth, LineAzimuthType); } ResetPoints(); @@ -318,12 +352,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; @@ -369,7 +403,10 @@ internal override void OnNewMapPointEvent(object obj) Point1 = point; HasPoint1 = true; var color = new RgbColorClass() { Green = 255 } as IColor; - AddGraphicToMap(Point1, color, true); + System.Collections.Generic.IDictionary ptAttributes = new System.Collections.Generic.Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + this.AddGraphicToMap(Point1, color, true, esriSimpleMarkerStyle.esriSMSCircle, esriRasterOpCode.esriROPNOP, ptAttributes ); return; } @@ -431,7 +468,7 @@ internal override void UpdateFeedback() } else { - if (Point1 != null && HasPoint1) + if ((Point1 != null) && HasPoint1 && (Distance > 0.0)) { if (feedback == null) { @@ -449,7 +486,7 @@ internal override void UpdateFeedback() var line = construct as IPolyline; - if (line.ToPoint != null) + if ((line != null) && (line.ToPoint != null)) { FeedbackMoveTo(line.ToPoint); Point2 = line.ToPoint; diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/RangeViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/RangeViewModel.cs index 90a2b50f..9ab77e98 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/RangeViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/RangeViewModel.cs @@ -23,6 +23,7 @@ using DistanceAndDirectionLibrary.Helpers; using DistanceAndDirectionLibrary; +using System.Collections.Generic; namespace ArcMapAddinDistanceAndDirection.ViewModels { @@ -35,6 +36,8 @@ public RangeViewModel() #region Properties + private double DistanceLimit = 20000000; + private bool isInteractive = false; public bool IsInteractive { @@ -74,6 +77,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; @@ -180,8 +236,16 @@ private void DrawRadials() if (construct == null) continue; - construct.ConstructGeodeticLineFromDistance(GetEsriGeodeticType(), Point1, GetLinearUnit(), radialLength, azimuth, esriCurveDensifyMethod.esriCurveDensifyByDeviation, -1.0); - AddGraphicToMap(construct as IGeometry); + var color = new RgbColorClass() { Red = 255 } as IColor; + IDictionary rrAttributes = new Dictionary(); + rrAttributes.Add("rings", NumberOfRings); + rrAttributes.Add("distance", Distance); + rrAttributes.Add("distanceunit", lineDistanceType.ToString()); + rrAttributes.Add("radials", NumberOfRadials); + rrAttributes.Add("centerx", Point1.X); + rrAttributes.Add("centery", Point1.Y); + construct.ConstructGeodeticLineFromDistance(esriGeodeticType.esriGeodeticTypeLoxodrome, Point1, GetLinearUnit(), radialLength, azimuth, esriCurveDensifyMethod.esriCurveDensifyByDeviation, -1.0); + AddGraphicToMap(construct as IGeometry, color, attributes:rrAttributes); azimuth += interval; } @@ -209,13 +273,25 @@ private IGeometry DrawRings() radius += Distance; var polyLine = new Polyline() as IPolyline; polyLine.SpatialReference = Point1.SpatialReference; + const double DENSIFY_ANGLE_IN_DEGREES = 5.0; construct = polyLine as IConstructGeodetic; - construct.ConstructGeodesicCircle(Point1, GetLinearUnit(), radius, esriCurveDensifyMethod.esriCurveDensifyByAngle, 0.001); - AddGraphicToMap(construct as IGeometry); + construct.ConstructGeodesicCircle(Point1, GetLinearUnit(), radius, + esriCurveDensifyMethod.esriCurveDensifyByAngle, DENSIFY_ANGLE_IN_DEGREES); + var color = new RgbColorClass() { Red = 255 } as IColor; + IDictionary rrAttributes = new Dictionary(); + rrAttributes.Add("rings", NumberOfRings); + rrAttributes.Add("distance", Distance); + rrAttributes.Add("distanceunit", lineDistanceType.ToString()); + rrAttributes.Add("radials", NumberOfRadials); + rrAttributes.Add("centerx", Point1.X); + rrAttributes.Add("centery", Point1.Y); + AddGraphicToMap(construct as IGeometry, color, attributes:rrAttributes); // Use negative radius to get the location for the distance label + // TODO: someone explain why we need to construct this circle twice, and what -radius means (top of circle or something)? DistanceTypes dtVal = (DistanceTypes)LineDistanceType; - construct.ConstructGeodesicCircle(Point1, GetLinearUnit(), -radius, esriCurveDensifyMethod.esriCurveDensifyByAngle, 0.001); + construct.ConstructGeodesicCircle(Point1, GetLinearUnit(), -radius, + esriCurveDensifyMethod.esriCurveDensifyByAngle, DENSIFY_ANGLE_IN_DEGREES); this.AddTextToMap(construct as IGeometry, String.Format("{0} {1}", radius.ToString(), dtVal.ToString())); } @@ -250,7 +326,10 @@ internal override void OnNewMapPointEvent(object obj) ClearTempGraphics(); var color = new RgbColorClass() { Green = 255 } as IColor; - AddGraphicToMap(Point1, color, true); + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + AddGraphicToMap( Point1, color, true, esriSimpleMarkerStyle.esriSMSCircle, esriRasterOpCode.esriROPNOP, ptAttributes); // Reset formatted string Point1Formatted = string.Empty; @@ -265,7 +344,10 @@ internal override void OnNewMapPointEvent(object obj) ClearTempGraphics(); var color = new RgbColorClass() { Green = 255 } as IColor; - AddGraphicToMap(Point1, color, true); + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + AddGraphicToMap(Point1, color, true, attributes: ptAttributes); // Reset formatted string Point1Formatted = string.Empty; @@ -337,9 +419,14 @@ private void ConstructGeoCircle() var construct = new Polyline() as IConstructGeodetic; if (construct != null) { + var color = new RgbColorClass() { Red = 255 } as IColor; + IDictionary rrAttributes = new Dictionary(); + rrAttributes.Add("rings", NumberOfRings); + rrAttributes.Add("distance", Distance); + rrAttributes.Add("radials", NumberOfRadials); construct.ConstructGeodesicCircle(Point1, GetLinearUnit(), Distance, esriCurveDensifyMethod.esriCurveDensifyByAngle, 0.45); Point2 = (construct as IPolyline).ToPoint; - this.AddGraphicToMap(construct as IGeometry); + this.AddGraphicToMap(construct as IGeometry, color, attributes: rrAttributes); maxDistance = Math.Max(Distance, maxDistance); // Use negative Distance to get the location for the distance label @@ -354,14 +441,24 @@ private void UpdateFeedbackWithGeoCircle() return; var construct = new Polyline() as IConstructGeodetic; + + if (construct != null) { + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); ClearTempGraphics(); - AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true); + AddGraphicToMap(Point1, new RgbColor() { Green = 255 } as IColor, true, attributes: ptAttributes ); + + IDictionary rrAttributes = new Dictionary(); + rrAttributes.Add("rings", NumberOfRings); + rrAttributes.Add("distance", Distance); + rrAttributes.Add("radials", NumberOfRadials); construct.ConstructGeodesicCircle(Point1, GetLinearUnit(), Distance, esriCurveDensifyMethod.esriCurveDensifyByAngle, 0.45); Point2 = (construct as IPolyline).ToPoint; var color = new RgbColorClass() as IColor; - this.AddGraphicToMap(construct as IGeometry, color, true, rasterOpCode: esriRasterOpCode.esriROPNotXOrPen); + this.AddGraphicToMap( construct as IGeometry, color, true, rasterOpCode: esriRasterOpCode.esriROPNotXOrPen, attributes:rrAttributes); } } diff --git a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs index 55c2681c..7ec7d70a 100644 --- a/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs +++ b/source/DistanceAndDirection/ArcMapAddinDistanceAndDirection/ArcMapAddinDistanceAndDirection/ViewModels/TabBaseViewModel.cs @@ -63,6 +63,8 @@ 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); + Mediator.Register(Constants.POINT_TEXT_KEYDOWN, OnPointTextBoxKeyDown); configObserver = new PropertyObserver(DistanceAndDirectionConfig.AddInConfig) .RegisterHandler(n => n.DisplayCoordinateType, n => @@ -82,6 +84,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(); @@ -151,6 +154,7 @@ public virtual IPoint Point2 RaisePropertyChanged(() => Point2Formatted); } } + string point1Formatted = string.Empty; /// /// String property for the first IPoint @@ -181,6 +185,9 @@ public string Point1Formatted { if (string.IsNullOrWhiteSpace(value)) { + if (!IsToolActive) + point1 = null; // reset the point if the user erased (TRICKY: tool sets to "" on click) + point1Formatted = string.Empty; RaisePropertyChanged(() => Point1Formatted); return; @@ -195,17 +202,24 @@ public string Point1Formatted HasPoint1 = true; Point1 = point; var color = new RgbColorClass() { Green = 255 } as IColor; - AddGraphicToMap(Point1, color, true); + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + AddGraphicToMap(Point1, color, true, esriSimpleMarkerStyle.esriSMSCircle, esriRasterOpCode.esriROPNOP, ptAttributes); // 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 @@ -248,6 +262,9 @@ public string Point2Formatted { if (string.IsNullOrWhiteSpace(value)) { + if (!IsToolActive) + point2 = null; // reset the point if the user erased (TRICKY: tool sets to "" on click) + point2Formatted = string.Empty; RaisePropertyChanged(() => Point2Formatted); return; @@ -602,6 +619,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; @@ -614,7 +636,7 @@ internal void ClearTempGraphics() RemoveGraphics(gc, true); - av.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); + av.PartialRefresh(esriViewDrawPhase.esriViewAll, null, null); RaisePropertyChanged(() => HasMapGraphics); } @@ -738,17 +760,19 @@ internal virtual void OnNewMapPointEvent(object obj) if (point == null) return; - + if (!HasPoint1) { // clear temp graphics ClearTempGraphics(); Point1 = point; HasPoint1 = true; - Point1Formatted = string.Empty; - + var color = new RgbColorClass() { Green = 255 } as IColor; - AddGraphicToMap(Point1, color, true); + IDictionary ptAttributes = new Dictionary(); + ptAttributes.Add("X", Point1.X); + ptAttributes.Add("Y", Point1.Y); + AddGraphicToMap( Point1, color, true, attributes: ptAttributes); // lets try feedback CreateFeedback(point, av); @@ -768,6 +792,11 @@ internal virtual void OnNewMapPointEvent(object obj) CreateMapElement(); ResetPoints(); } + + if (!HasPoint3) + { + HasPoint3 = true; + } } #endregion @@ -900,7 +929,7 @@ internal virtual void Reset(bool toolReset) /// internal virtual void ResetPoints() { - HasPoint1 = HasPoint2 = false; + HasPoint1 = HasPoint2 = HasPoint3 = false; } /// @@ -928,10 +957,81 @@ private void OnTabItemSelected(object obj) { if (obj == null) return; - + IsToolActive = false; 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 && HasPoint3)) + { + 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 && !HasPoint3) + { + 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; + } + } + } + } + } + + /// + /// Handler for when key is manually pressed in a Point Text Box + /// + /// always null + private void OnPointTextBoxKeyDown(object obj) + { + if (isActiveTab) + { + // deactivate the map point tool when a point is manually entered + if (IsToolActive) + IsToolActive = false; + } + } /// /// Converts a polyline into a polygon @@ -976,7 +1076,7 @@ internal void AddTextToMap(IGeometry geom, string text) textEle.Text = text; var elem = textEle as IElement; elem.Geometry = geom; - + var eprop = elem as IElementProperties; eprop.Name = Guid.NewGuid().ToString(); @@ -997,11 +1097,58 @@ internal void AddTextToMap(IGeometry geom, string text) RaisePropertyChanged(() => HasMapGraphics); } + internal void AddTextToMap(IGeometry geom, string text, double angle, AzimuthTypes azimuthType) + { + var mxDoc = ArcMap.Application.Document as IMxDocument; + var av = mxDoc.FocusMap as IActiveView; + var gc = av as IGraphicsContainer; + double bearing = 0.0; + if(azimuthType == AzimuthTypes.Mils) + { + bearing = angle * 0.05625; + } + else + { + bearing = angle; + } + double rotate = 360 - (bearing + 270.0) % 360; + if (rotate > 90 && rotate <= 270) + rotate = rotate - 180; + var textEle = new TextElement() as ITextElement; + textEle.Text = text; + ITextSymbol tsym = new TextSymbol(); + + tsym.Angle = rotate; + textEle.Symbol = tsym; + var elem = textEle as IElement; + elem.Geometry = geom; + + var eprop = elem as IElementProperties; + eprop.Name = Guid.NewGuid().ToString(); + Dictionary attributeMap = new Dictionary(); + if (geom.GeometryType == esriGeometryType.esriGeometryPoint) + GraphicsList.Add(new Graphic(GraphicTypes.Point, eprop.Name, geom, this, false)); + else if (this is LinesViewModel) + { + GraphicsList.Add(new Graphic(GraphicTypes.Line, eprop.Name, geom, this, false)); + } + else if (this is CircleViewModel) + GraphicsList.Add(new Graphic(GraphicTypes.Circle, eprop.Name, geom, this, false)); + else if (this is EllipseViewModel) + GraphicsList.Add(new Graphic(GraphicTypes.Ellipse, eprop.Name, geom, this, false)); + else if (this is RangeViewModel) + GraphicsList.Add(new Graphic(GraphicTypes.RangeRing, eprop.Name, geom, this, false)); + + gc.AddElement(elem, 0); + av.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); + + RaisePropertyChanged(() => HasMapGraphics); + } /// /// Adds a graphic element to the map graphics container /// /// IGeometry - internal void AddGraphicToMap(IGeometry geom, IColor color, bool IsTempGraphic = false, esriSimpleMarkerStyle markerStyle = esriSimpleMarkerStyle.esriSMSCircle, esriRasterOpCode rasterOpCode = esriRasterOpCode.esriROPNOP) + internal void AddGraphicToMap(IGeometry geom, IColor color, bool IsTempGraphic = false, esriSimpleMarkerStyle markerStyle = esriSimpleMarkerStyle.esriSMSCircle, esriRasterOpCode rasterOpCode = esriRasterOpCode.esriROPNOP, IDictionaryattributes = null) { if (geom == null || ArcMap.Document == null || ArcMap.Document.FocusMap == null) return; @@ -1081,15 +1228,15 @@ internal void AddGraphicToMap(IGeometry geom, IColor color, bool IsTempGraphic = eprop.Name = Guid.NewGuid().ToString(); if (geom.GeometryType == esriGeometryType.esriGeometryPoint) - GraphicsList.Add(new Graphic(GraphicTypes.Point, eprop.Name, geom, this, IsTempGraphic)); + GraphicsList.Add(new Graphic(GraphicTypes.Point, eprop.Name, geom, this, IsTempGraphic, attributes: attributes)); else if (this is LinesViewModel) - GraphicsList.Add(new Graphic(GraphicTypes.Line, eprop.Name, geom, this, IsTempGraphic)); + GraphicsList.Add(new Graphic(GraphicTypes.Line, eprop.Name, geom, this, IsTempGraphic, attributes: attributes)); else if (this is CircleViewModel) - GraphicsList.Add(new Graphic(GraphicTypes.Circle, eprop.Name, geom, this, IsTempGraphic)); + GraphicsList.Add(new Graphic(GraphicTypes.Circle, eprop.Name, geom, this, IsTempGraphic, attributes: attributes)); else if (this is EllipseViewModel) - GraphicsList.Add(new Graphic(GraphicTypes.Ellipse, eprop.Name, geom, this, IsTempGraphic)); + GraphicsList.Add(new Graphic(GraphicTypes.Ellipse, eprop.Name, geom, this, IsTempGraphic, attributes: attributes)); else if (this is RangeViewModel) - GraphicsList.Add(new Graphic(GraphicTypes.RangeRing, eprop.Name, geom, this, IsTempGraphic)); + GraphicsList.Add(new Graphic(GraphicTypes.RangeRing, eprop.Name, geom, this, IsTempGraphic, attributes: attributes)); gc.AddElement(element, 0); @@ -1104,7 +1251,7 @@ internal void AddGraphicToMap(IGeometry geom, IColor color, bool IsTempGraphic = /// /// /// - internal void AddGraphicToMap(IGeometry geom, bool IsTempGraphic = false) + internal void AddGraphicToMap(IGeometry geom, bool IsTempGraphic = false, IDictionaryattributes=null) { var color = new RgbColorClass() { Red = 255 } as IColor; AddGraphicToMap(geom, color, IsTempGraphic); @@ -1162,6 +1309,48 @@ 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, bool lax) + { + return TrimPrecision(inputDistance, lineDistanceType, lax); + } + + // Remove superfluous precision + protected double TrimPrecision(double inputDistance, DistanceTypes lineDistanceType_param, bool lax) + { + int largeUnitRoundingFactor = 4; + int smallUnitRoundingFactor = 1; + + // We have a less strict mode for trimming precision for the case that the user + // has Distance Calculator expanded and thus might have a large unit selected + // - otherwise we can trim label down to e.g. 0.00 Miles + if (lax) + { + largeUnitRoundingFactor = 6; + smallUnitRoundingFactor = 2; + } + + double returnDistance = 0; + // 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) + { + case DistanceTypes.Kilometers: + case DistanceTypes.Miles: + case DistanceTypes.NauticalMile: + returnDistance = Math.Round(inputDistance, largeUnitRoundingFactor); + break; + case DistanceTypes.Meters: + case DistanceTypes.Feet: + case DistanceTypes.Yards: + returnDistance = Math.Round(inputDistance, smallUnitRoundingFactor); + break; + default: + break; + } + return returnDistance; + } + private esriUnits GetEsriUnit(DistanceTypes distanceType) { esriUnits unit = esriUnits.esriMeters; @@ -1233,6 +1422,7 @@ internal double GetGeodeticLengthFromPolyline(IPolyline polyline) return geodeticLength; } + /// /// Gets the distance/lenght of a polyline /// @@ -1244,8 +1434,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, false); } + /// /// Handler for the mouse move event /// When the mouse moves accross the map, IPoints are returned to aid in updating feedback to user 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 00000000..cb350bef Binary files /dev/null and b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Core.dll differ 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 00000000..6f92c9a6 Binary files /dev/null and b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Interfaces.dll differ diff --git a/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Linq.XML b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Linq.XML new file mode 100644 index 00000000..3f81a969 --- /dev/null +++ b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Linq.XML @@ -0,0 +1,10779 @@ + + + + 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 00000000..c5069f93 Binary files /dev/null and b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.Linq.dll differ 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 + + + + + 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 00000000..541cb2e3 Binary files /dev/null and b/source/DistanceAndDirection/Dependencies/ReactiveExtensions/net45/System.Reactive.PlatformServices.dll differ diff --git a/source/DistanceAndDirection/DistanceAndDirection.sln b/source/DistanceAndDirection/DistanceAndDirection.sln index c99373cc..bfb5d730 100644 --- a/source/DistanceAndDirection/DistanceAndDirection.sln +++ b/source/DistanceAndDirection/DistanceAndDirection.sln @@ -9,13 +9,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProAppDistanceAndDirectionM EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DistanceAndDirectionLibrary", "DistanceAndDirectionLibrary\DistanceAndDirectionLibrary.csproj", "{23854FB8-98F1-443B-82FB-21718D39EF94}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{CC434F8F-6164-4A24-8609-6020CEFE0793}" - ProjectSection(SolutionItems) = preProject - .nuget\NuGet.Config = .nuget\NuGet.Config - .nuget\NuGet.exe = .nuget\NuGet.exe - .nuget\NuGet.targets = .nuget\NuGet.targets - EndProjectSection -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArcMapAddinDistanceAndDirection.Tests", "ArcMapAddinDistanceAndDirection.Tests\ArcMapAddinDistanceAndDirection.Tests.csproj", "{7C0196B2-7EDE-43E6-AF92-374602D1DB07}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProAppDistanceAndDirectionModule.Tests", "ProAppDistanceAndDirectionModule.Tests\ProAppDistanceAndDirectionModule.Tests.csproj", "{8DBE05CE-8026-4631-8E8A-BFC54DACD23B}" diff --git a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Helpers/Constants.cs b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Helpers/Constants.cs index 8cc0e560..73b83080 100644 --- a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Helpers/Constants.cs +++ b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Helpers/Constants.cs @@ -23,5 +23,7 @@ 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"; + public const string POINT_TEXT_KEYDOWN = "POINT_TEXT_KEYDOWN"; } } diff --git a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Properties/AssemblyInfo.cs b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Properties/AssemblyInfo.cs index 81413a71..3d4fd6a4 100644 --- a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Properties/AssemblyInfo.cs +++ b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Properties/AssemblyInfo.cs @@ -6,11 +6,11 @@ // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("DistanceAndDirectionLibrary")] -[assembly: AssemblyDescription("")] +[assembly: AssemblyDescription("DistanceAndDirectionLibrary")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Esri")] [assembly: AssemblyProduct("DistanceAndDirectionLibrary")] -[assembly: AssemblyCopyright("Copyright © Esri 2016")] +[assembly: AssemblyCopyright("Copyright © Esri 2017")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("2.1.0")] +[assembly: AssemblyFileVersion("2.1.0")] diff --git a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Properties/Resources.Designer.cs b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Properties/Resources.Designer.cs index c4e45c60..7de91b9c 100644 --- a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Properties/Resources.Designer.cs +++ b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Properties/Resources.Designer.cs @@ -60,6 +60,15 @@ internal Resources() { } } + /// + /// Looks up a localized string similar to Enter value. + /// + public static string AEEnterValue { + get { + return ResourceManager.GetString("AEEnterValue", resourceCulture); + } + } + /// /// Looks up a localized string similar to Invalid coordinate. /// diff --git a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Properties/Resources.resx b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Properties/Resources.resx index 605c7376..39d9855f 100644 --- a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Properties/Resources.resx +++ b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Properties/Resources.resx @@ -117,6 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Enter value + Invalid coordinate diff --git a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml index f76a7bd4..75d5b33a 100644 --- a/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml +++ b/source/DistanceAndDirection/DistanceAndDirectionLibrary/Views/CircleView.xaml @@ -56,7 +56,7 @@ Text="{Binding Path=Point1Formatted, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True}" - Validation.ErrorTemplate="{StaticResource errorTemplate}"> + Validation.ErrorTemplate="{StaticResource errorTemplate}" PreviewKeyDown="TextBox_KeyDown"> - + Mode=TwoWay, ValidatesOnExceptions=True}" > - + Mode=TwoWay, ValidatesOnExceptions=True}"> - ..\..\..\..\..\..\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.Tests/ProAppDistanceAndDirectionModule.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule.Tests/ProAppDistanceAndDirectionModule.cs index 08a3917b..0fd80ff9 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule.Tests/ProAppDistanceAndDirectionModule.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule.Tests/ProAppDistanceAndDirectionModule.cs @@ -71,6 +71,22 @@ public void ProCircleViewModel() circleVM.Distance = 1000.0; } + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void ProCircleViewModel_ThrowsException5() + { + var circleVM = new ProCircleViewModel(); + circleVM.DistanceString = "1000.3.4"; + } + + [TestMethod] + [ExpectedException(typeof(ArgumentException))] + public void ProCircleViewModel_ExceedsLimit() + { + var circleVM = new ProCircleViewModel(); + circleVM.DistanceString = "20000001"; + } + #endregion Circle View Model #region Ellipse View Model diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Config.daml b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Config.daml index 353506a5..e370c06b 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Config.daml +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Config.daml @@ -1,12 +1,12 @@  - + Distance and Direction Create Lines, Circles, Ellipses and Range Rings Images\AddinDesktop32.png Esri Esri - 3/30/2016 10:44:50 AM, 2016 - Framework + 6/1/2017 + Framework, Editing, Map Authoring @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs index 15c9cde9..50f2259f 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/FeatureClassUtils.cs @@ -126,8 +126,9 @@ 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 +145,8 @@ await QueuedTask.Run(() => { TableDefinition definition = table.GetDefinition(); int shapeIndex = definition.FindField("Shape"); - + + string graphicsType; foreach (Graphic graphic in graphicsList) { rowBuffer = table.CreateRowBuffer(); @@ -155,10 +157,101 @@ await QueuedTask.Run(() => pb.HasZ = false; rowBuffer[shapeIndex] = pb.ToGeometry(); isLine = true; + + // Only add attributes for Esri format + + // Add attributes + graphicsType = graphic.p.GetType().ToString().Replace("ProAppDistanceAndDirectionModule.", ""); + switch (graphicsType) + { + case "LineAttributes": + { + try + { + // Add attributes + rowBuffer[definition.FindField("Distance")] = ((LineAttributes)graphic.p)._distance; + rowBuffer[definition.FindField("DistUnit")] = ((LineAttributes)graphic.p).distanceunit; + rowBuffer[definition.FindField("Angle")] = ((LineAttributes)graphic.p).angle; + rowBuffer[definition.FindField("AngleUnit")] = ((LineAttributes)graphic.p).angleunit; + rowBuffer[definition.FindField("OriginX")] = ((LineAttributes)graphic.p).originx; + rowBuffer[definition.FindField("OriginY")] = ((LineAttributes)graphic.p).originy; + rowBuffer[definition.FindField("DestX")] = ((LineAttributes)graphic.p).destinationx; + rowBuffer[definition.FindField("DestY")] = ((LineAttributes)graphic.p).destinationy; + break; + } + // Catch exception likely due to missing fields + // Just skip attempting to write to fields + catch + { + break; + } + } + case "RangeAttributes": + { + try + { + rowBuffer[definition.FindField("Rings")] = ((RangeAttributes)graphic.p).numRings; + rowBuffer[definition.FindField("Distance")] = ((RangeAttributes)graphic.p).distance; + rowBuffer[definition.FindField("DistUnit")] = ((RangeAttributes)graphic.p).distanceunit; + rowBuffer[definition.FindField("Radials")] = ((RangeAttributes)graphic.p).numRadials; + rowBuffer[definition.FindField("CenterX")] = ((RangeAttributes)graphic.p).centerx; + rowBuffer[definition.FindField("CenterY")] = ((RangeAttributes)graphic.p).centery; + break; + } + catch + { + break; + } + } + } + } else if (graphic.Geometry is Polygon) + { rowBuffer[shapeIndex] = new PolygonBuilder(graphic.Geometry as Polygon).ToGeometry(); + // Only add attributes for Esri format + + // Add attributes + graphicsType = graphic.p.GetType().ToString().Replace("ProAppDistanceAndDirectionModule.", ""); + switch (graphicsType) + { + case "CircleAttributes": + { + try + { + rowBuffer[definition.FindField("Distance")] = ((CircleAttributes)graphic.p).distance; + rowBuffer[definition.FindField("DistUnit")] = ((CircleAttributes)graphic.p).distanceunit; + rowBuffer[definition.FindField("DistType")] = ((CircleAttributes)graphic.p).circletype; + rowBuffer[definition.FindField("CenterX")] = ((CircleAttributes)graphic.p).centerx; + rowBuffer[definition.FindField("CenterY")] = ((CircleAttributes)graphic.p).centery; + break; + } + catch (Exception e) + { + break; + } + } + case "EllipseAttributes": + try + { + rowBuffer[definition.FindField("Minor")] = ((EllipseAttributes)graphic.p).minorAxis; + rowBuffer[definition.FindField("Major")] = ((EllipseAttributes)graphic.p).majorAxis; + rowBuffer[definition.FindField("DistUnit")] = ((EllipseAttributes)graphic.p).distanceunit; + rowBuffer[definition.FindField("CenterX")] = ((EllipseAttributes)graphic.p).centerx; + rowBuffer[definition.FindField("CenterY")] = ((EllipseAttributes)graphic.p).centery; + rowBuffer[definition.FindField("Angle")] = ((EllipseAttributes)graphic.p).angle; + rowBuffer[definition.FindField("AngleUnit")] = ((EllipseAttributes)graphic.p).angleunit; + break; + } + catch + { + break; + } + } + + } + Row row = table.CreateRow(rowBuffer); } } @@ -194,6 +287,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 /// @@ -214,8 +316,13 @@ private static async Task CreateFeatureClass(string dataset, GeomType geomType, { try { - string strGeomType = geomType == GeomType.PolyLine ? "POLYLINE" : "POLYGON"; + List list = ClearTempGraphics(graphicsList); + if ((list == null) || (list.Count == 0)) + return; + + string strGeomType = geomType == GeomType.PolyLine ? "POLYLINE" : "POLYGON"; + List arguments = new List(); // store the results in the geodatabase arguments.Add(connection); @@ -224,30 +331,110 @@ private static async Task CreateFeatureClass(string dataset, GeomType geomType, // type of geometry arguments.Add(strGeomType); // no template - arguments.Add(""); + arguments.Add(null); // no m values arguments.Add("DISABLED"); // no z values arguments.Add("DISABLED"); - arguments.Add(spatialRef); + arguments.Add(spatialRef.Wkid.ToString()); + + + // store the results in the geodatabase + object[] argArray = arguments.ToArray(); + + var environments = Geoprocessing.MakeEnvironmentArray(overwriteoutput: true); + //var valueArray = Geoprocessing.MakeValueArray(argArray); - var valueArray = Geoprocessing.MakeValueArray(arguments.ToArray()); - IGPResult result = await Geoprocessing.ExecuteToolAsync("CreateFeatureclass_management", valueArray); + IGPResult result = await Geoprocessing.ExecuteToolAsync("CreateFeatureclass_management", + Geoprocessing.MakeValueArray(argArray), + environments, + null, + null); - await CreateFeatures(graphicsList); + // Add additional fields based on type of graphic + string nameNoExtension = Path.GetFileNameWithoutExtension(dataset); + string featureClass = ""; if (isKML) - { + { + featureClass = connection + "/" + nameNoExtension + ".shp"; + } + else + { + featureClass = connection + "/" + dataset; + } + + string graphicsType = list[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, "DistUnit", "TEXT")); + IGPResult result4 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "OriginX", "DOUBLE")); + IGPResult result5 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "OriginY", "DOUBLE")); + IGPResult result6 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "DestX", "DOUBLE")); + IGPResult result7 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "DestY", "DOUBLE")); + IGPResult result8 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Angle", "DOUBLE")); + IGPResult result9 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "AngleUnit", "TEXT")); + break; + } + case "CircleAttributes": + { + IGPResult result2 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Distance", "DOUBLE")); + IGPResult result3 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "DistUnit", "TEXT")); + IGPResult result4 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "DistType", "TEXT")); + IGPResult result5 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "CenterX", "DOUBLE")); + IGPResult result6 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "CenterY", "DOUBLE")); + 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, "DistUnit", "TEXT")); + IGPResult result5 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "CenterX", "DOUBLE")); + IGPResult result6 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "CenterY", "DOUBLE")); + IGPResult result7 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Angle", "DOUBLE")); + IGPResult result8 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "AngleUnit", "TEXT")); + 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, "DistUnit", "TEXT")); + IGPResult result5 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "Radials", "LONG")); + IGPResult result6 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "CenterX", "DOUBLE")); + IGPResult result7 = await Geoprocessing.ExecuteToolAsync("AddField_management", makeValueArray(featureClass, "CenterY", "DOUBLE")); + break; + } + } + + + await CreateFeatures(list, isKML); + + if (isKML) + { await KMLUtils.ConvertLayerToKML(connection, dataset, MapView.Active); // Delete temporary Shapefile - string[] extensionNames = {".cpg", ".dbf", ".prj", ".shx", ".shp"}; + string[] extensionNames = { ".cpg", ".dbf", ".prj", ".shx", ".shp", ".sbn", ".sbx" }; string datasetNoExtension = Path.GetFileNameWithoutExtension(dataset); foreach (string extension in extensionNames) { string shapeFile = Path.Combine(connection, datasetNoExtension + extension); - File.Delete(shapeFile); + string shapefileproj = Path.Combine(connection, datasetNoExtension + "_proj" + extension); + if(File.Exists(shapeFile)) + File.Delete(shapeFile); + if (File.Exists(shapefileproj)) + File.Delete(shapefileproj); + } + DirectoryInfo dir = new DirectoryInfo(connection); + FileSystemInfo fsi = dir; + fsi.Refresh(); + } } catch (Exception ex) @@ -255,5 +442,20 @@ private static async Task CreateFeatureClass(string dataset, GeomType geomType, MessageBox.Show(ex.ToString()); } } + + private static List ClearTempGraphics(List graphicsList) + { + + List list = new List(); + foreach (var item in graphicsList) + { + + if (!item.IsTemp) + { + list.Add(item); + } + } + return list; + } } } 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/Models/KMLUtils.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/KMLUtils.cs index 73e61539..f7241f46 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/KMLUtils.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Models/KMLUtils.cs @@ -14,12 +14,14 @@ * limitations under the License. ******************************************************************************/ +using ArcGIS.Core.Geometry; // Esri using ArcGIS.Desktop.Core.Geoprocessing; using ArcGIS.Desktop.Mapping; // System using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.IO; using System.Threading.Tasks; @@ -39,9 +41,20 @@ public static async Task ConvertLayerToKML(string kmzOutputPath, string datasetN try { string nameNoExtension = Path.GetFileNameWithoutExtension(datasetName); - + + List projArg = new List(); + var srout = SpatialReferenceBuilder.CreateSpatialReference(4326); + string outshp = nameNoExtension + "_proj"; + string projshpPath = Path.Combine(kmzOutputPath, outshp + ".shp"); + string shppath = Path.Combine(kmzOutputPath, nameNoExtension + ".shp"); + projArg.Add(shppath); + projArg.Add(projshpPath); + projArg.Add(srout); + var projvalueArray = Geoprocessing.MakeValueArray(projArg.ToArray()); + IGPResult projresult = await Geoprocessing.ExecuteToolAsync("Project_management", projvalueArray); + List arguments2 = new List(); - arguments2.Add(nameNoExtension); + arguments2.Add(outshp); string fullPath = Path.Combine(kmzOutputPath, datasetName); arguments2.Add(fullPath); @@ -49,9 +62,23 @@ public static async Task ConvertLayerToKML(string kmzOutputPath, string datasetN IGPResult result = await Geoprocessing.ExecuteToolAsync("LayerToKML_conversion", valueArray); // Remove the layer from the TOC - var layer = MapView.Active.GetSelectedLayers()[0]; - MapView.Active.Map.RemoveLayer(layer); - + Layer layer1 = null; + Layer layer2 = null; + ReadOnlyObservableCollection layers = MapView.Active.Map.Layers; + foreach (Layer layer in layers) + { + if(layer.Name==outshp) + { + layer1 = layer; + } + else if(layer.Name==nameNoExtension) + { + layer2 = layer; + } + } + //var layer = MapView.Active.GetSelectedLayers()[0]; + MapView.Active.Map.RemoveLayer(layer1); + MapView.Active.Map.RemoveLayer(layer2); } catch(Exception ex) { diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule.csproj b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule.csproj index 36dfedd3..155b0fe4 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 @@ -115,6 +115,7 @@ + @@ -159,9 +160,6 @@ - - - @@ -187,11 +185,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/Properties/AssemblyInfo.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Properties/AssemblyInfo.cs index a7f753d0..25b9c4d9 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Properties/AssemblyInfo.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/Properties/AssemblyInfo.cs @@ -6,11 +6,11 @@ // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("ProAppDistanceAndDirectionModule")] -[assembly: AssemblyDescription("")] +[assembly: AssemblyDescription("ProAppDistanceAndDirectionModule")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyCompany("Esri")] [assembly: AssemblyProduct("ProAppDistanceAndDirectionModule")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2016")] +[assembly: AssemblyCopyright("Copyright © Esri 2017")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("2.1.0")] +[assembly: AssemblyFileVersion("2.1.0")] 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/ProCircleViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProCircleViewModel.cs index 62434293..79f5df5d 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProCircleViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProCircleViewModel.cs @@ -20,6 +20,7 @@ using DistanceAndDirectionLibrary; using DistanceAndDirectionLibrary.Helpers; using System; +using System.Threading; using System.Threading.Tasks; namespace ProAppDistanceAndDirectionModule.ViewModels @@ -51,12 +52,16 @@ public ProCircleViewModel() #region Properties + private double DistanceLimit = 20000000; + private Boolean EndsWithDecimal = false; + private String decimalSeparator = Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator; CircleFromTypes circleType = CircleFromTypes.Radius; /// /// Type of circle property /// public CircleFromTypes CircleType { + get { return circleType; } set { @@ -65,16 +70,21 @@ public CircleFromTypes CircleType circleType = value; + double distanceInMeters = TravelRateInSeconds * TravelTimeInSeconds; + if (RateUnit != DistanceTypes.Meters) + { + // Prevent graphical glitches from excessively high inputs + distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + } + if (IsDistanceCalcExpanded) { - UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit); + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, (distanceInMeters < DistanceLimit)); } else { if (value == CircleFromTypes.Diameter) - Distance /= 2.0; - else - Distance *= 2.0; + DistanceString = (base.Distance * 2.0).ToString("G"); } // reset distance @@ -91,8 +101,8 @@ public CircleFromTypes CircleType /// public TimeUnits TimeUnit { - get - { + + get { return timeUnit; } set @@ -101,12 +111,33 @@ public TimeUnits TimeUnit { return; } - timeUnit = value; + + double distanceInMeters = TravelRateInSeconds * TravelTimeInSeconds; + if (RateUnit != DistanceTypes.Meters) + { + // Prevent graphical glitches from excessively high inputs + distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + } - UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit); + if (distanceInMeters > DistanceLimit) + { + 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, ColorFactory.GreenRGB, null, true, 5.0); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, true); + + // Trigger validation to clear error messages as necessary + RaisePropertyChanged(() => RateTimeUnit); RaisePropertyChanged(() => TimeUnit); + RaisePropertyChanged(() => TravelRateString); + RaisePropertyChanged(() => TravelTimeString); } } @@ -158,12 +189,49 @@ 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(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + } + } + double travelTime = 0.0; /// /// Property for time display /// public double TravelTime { + get { return travelTime; @@ -171,24 +239,88 @@ public double TravelTime set { if (value < 0.0) + { + UpdateFeedbackWithGeoCircle(); + ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); + } travelTime = value; + + double distanceInMeters = TravelRateInSeconds * TravelTimeInSeconds; + if (RateUnit != DistanceTypes.Meters) + { + // Prevent graphical glitches from excessively high inputs + distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + } + if (distanceInMeters > DistanceLimit) + { + 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, ColorFactory.GreenRGB, null, true, 5.0); + 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); + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, true); - RaisePropertyChanged(() => TravelTime); + // Trigger validation to clear error messages as necessary + RaisePropertyChanged(() => RateTimeUnit); + RaisePropertyChanged(() => TimeUnit); + RaisePropertyChanged(() => TravelRateString); + RaisePropertyChanged(() => TravelTimeString); } + } - private void UpdateDistance(double distance, DistanceTypes fromDistanceType) + private void UpdateDistance(double distance, DistanceTypes fromDistanceType, bool belowLimit) { - if(CircleType == CircleFromTypes.Diameter) - Distance = ConvertFromTo(fromDistanceType, LineDistanceType, distance) * 2.0; - else - Distance = ConvertFromTo(fromDistanceType, LineDistanceType, distance); - UpdateFeedbackWithGeoCircle(); + Distance = ConvertFromTo(fromDistanceType, LineDistanceType, distance); + + if (belowLimit) + { + UpdateFeedbackWithGeoCircle(); + } + } + + 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(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + } } double travelRate = 0.0; @@ -197,6 +329,7 @@ private void UpdateDistance(double distance, DistanceTypes fromDistanceType) /// public double TravelRate { + get { return travelRate; @@ -208,9 +341,30 @@ public double TravelRate travelRate = value; - UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit); + double distanceInMeters = TravelRateInSeconds * TravelTimeInSeconds; + if (RateUnit != DistanceTypes.Meters) + { + // Prevent graphical glitches from excessively high inputs + distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + } + if (distanceInMeters > DistanceLimit) + { + 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, ColorFactory.GreenRGB, null, true, 5.0); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + + UpdateDistance(TravelRateInSeconds * TravelTimeInSeconds, RateUnit, true); + RaisePropertyChanged(() => TravelRateString); - RaisePropertyChanged(() => TravelRate); + // Trigger validation to clear error messages as necessary + RaisePropertyChanged(() => TravelTimeString); + RaisePropertyChanged(() => RateTimeUnit); + RaisePropertyChanged(() => TimeUnit); } } @@ -233,6 +387,20 @@ public override DistanceTypes LineDistanceType } base.LineDistanceType = value; + + double distanceInMeters = Distance; + if (value != DistanceTypes.Meters) + { + distanceInMeters = ConvertFromTo(value, DistanceTypes.Meters, Distance); + } + 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, ColorFactory.GreenRGB, null, true, 5.0); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } } } @@ -272,7 +440,24 @@ public DistanceTypes RateUnit rateUnit = value; - UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit); + double distanceInMeters = TravelRateInSeconds * TravelTimeInSeconds; + if (rateUnit != DistanceTypes.Meters) + { + // Prevent graphical glitches from excessively high inputs + distanceInMeters = ConvertFromTo(rateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + } + if (distanceInMeters > DistanceLimit) + { + 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, ColorFactory.GreenRGB, null, true, 5.0); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + + UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, (distanceInMeters < DistanceLimit)); RaisePropertyChanged(() => RateUnit); } @@ -293,9 +478,29 @@ public RateTimeTypes RateTimeUnit } rateTimeUnit = value; - UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit); + double distanceInMeters = TravelRateInSeconds * TravelTimeInSeconds; + if (RateUnit != DistanceTypes.Meters) + { + // Prevent graphical glitches from excessively high inputs + distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + } + if (distanceInMeters > DistanceLimit) + { + 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, ColorFactory.GreenRGB, null, true, 5.0); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, true); + + // Trigger validation to clear error messages as necessary RaisePropertyChanged(() => RateTimeUnit); + RaisePropertyChanged(() => TravelTimeString); + RaisePropertyChanged(() => TravelRateString); } } @@ -320,7 +525,7 @@ public bool IsDistanceCalcExpanded ClearTempGraphics(); if (HasPoint1) - AddGraphicToMap(Point1, ColorFactory.GreenRGB, true, 5.0); + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); RaisePropertyChanged(() => IsDistanceCalcExpanded); } @@ -334,16 +539,57 @@ public override string DistanceString { get { + String dString = ""; if (CircleType == CircleFromTypes.Diameter) { - return (Distance * 2.0).ToString("G"); - } + if (EndsWithDecimal) + { + dString = (Distance * 2.0).ToString("G"); + if (dString.Contains(decimalSeparator)) + { + int indexOfDecimal = dString.IndexOf(decimalSeparator); - return base.DistanceString; + return dString.Substring(0,indexOfDecimal+1); + } + else + return dString + decimalSeparator; + } + else + return (Distance * 2.0).ToString("G"); + + } + else + { + if (EndsWithDecimal) + { + dString = (Distance).ToString("G"); + if (dString.Contains(decimalSeparator)) + { + int indexOfDecimal = dString.IndexOf(decimalSeparator); + return dString.Substring(0, indexOfDecimal + 1); + } + else + return dString + decimalSeparator; + } + else + return Distance.ToString("D"); + } } set { - // lets avoid an infinite loop here + //Handle for decimals + if(value.EndsWith(decimalSeparator)) + { + EndsWithDecimal = true; + return; + } + else + { + EndsWithDecimal = false; + } + + + // lets avoid an infinite loop here if (CircleType == CircleFromTypes.Diameter) { if (string.Equals(base.DistanceString, (Convert.ToDouble(value)*2.0).ToString())) @@ -355,39 +601,57 @@ public override string DistanceString return; } - base.DistanceString = value; - // divide the manual input by 2 double d = 0.0; if (double.TryParse(value, out d)) { + if (CircleType == CircleFromTypes.Diameter) { - return; + if (Distance == d) + return; } else { if (Distance == d) return; } + double dist = 0.0; if (CircleType == CircleFromTypes.Diameter) - - d /= 2.0; - Distance = d; + dist = d / 2.0; + else + dist = d; - UpdateFeedbackWithGeoCircle(); - if (CircleType == CircleFromTypes.Diameter) - d /= 2.0; + Distance = dist; - Distance = d; + double distanceInMeters = dist; + if (LineDistanceType != DistanceTypes.Meters) + { + distanceInMeters = ConvertFromTo(LineDistanceType, DistanceTypes.Meters, Distance); + } + 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, ColorFactory.GreenRGB, null, true, 5.0); + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } UpdateFeedbackWithGeoCircle(); } else { + ClearTempGraphics(); + if (HasPoint1) + // Re-add the point as it was cleared by ClearTempGraphics() but we still want to see it + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); } + + // Trigger update to clear exception highlighting if necessary + RaisePropertyChanged(() => LineDistanceType); } } @@ -422,9 +686,16 @@ internal override void OnNewMapPointEvent(object obj) base.OnNewMapPointEvent(obj); + double distanceInMeters = TravelRateInSeconds * TravelTimeInSeconds; + if (RateUnit != DistanceTypes.Meters) + { + // Prevent graphical glitches from excessively high inputs + distanceInMeters = ConvertFromTo(RateUnit, DistanceTypes.Meters, TravelRateInSeconds * TravelTimeInSeconds); + } + if (IsDistanceCalcExpanded) { - UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit); + UpdateDistance(TravelTimeInSeconds * TravelRateInSeconds, RateUnit, (distanceInMeters < DistanceLimit)); } } @@ -504,6 +775,7 @@ internal override void Reset(bool toolReset) /// private Geometry CreateCircle(bool isFeedback) { + if (Point1 == null || double.IsNaN(Distance) || Distance <= 0.0) { return null; @@ -528,9 +800,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); + CircleAttributes circleAttributes = new CircleAttributes() { mapPoint = Point1, distance = Distance, circleFromTypes = CircleType, circletype=CircleType.ToString(), centerx=Point1.X, centery=Point1.Y, distanceunit=LineDistanceType.ToString()}; + 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..f99bc32c 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProEllipseViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProEllipseViewModel.cs @@ -319,9 +319,19 @@ internal override void OnMouseMoveEvent(object obj) // update bearing var segment = QueuedTask.Run(() => { - return LineBuilder.CreateLineSegment(Point1, point); + try + { + return LineBuilder.CreateLineSegment(Point1, point); + } + catch (Exception ex) + { + return null; + } }).Result; + if (segment == null) + return; + UpdateAzimuth(segment.Angle); } else if (HasPoint1 && HasPoint2 && !HasPoint3) @@ -356,8 +366,14 @@ 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, para.AxisDirection); + + // Point + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); + // Ellipse + AddGraphicToMap(geom, ColorFactory.GreyRGB, null, true); } catch(Exception ex) { @@ -385,7 +401,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) @@ -517,7 +533,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() { mapPoint = Point1, minorAxis = MinorAxisDistance, majorAxis = MajorAxisDistance, angle = param.AxisDirection, angleunit=AzimuthType.ToString(), centerx=Point1.X, centery=Point1.Y, distanceunit=LineDistanceType.ToString() }; + + 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/ProGraphicAttributes.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProGraphicAttributes.cs new file mode 100644 index 00000000..71e93538 --- /dev/null +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProGraphicAttributes.cs @@ -0,0 +1,63 @@ +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 + { + public MapPoint mapPoint1 { get; set; } + public MapPoint mapPoint2 { get; set; } + public double _distance { get; set; } + public string distanceunit { get; set; } + public double angle { get; set; } + public string angleunit { get; set; } + public double originx { get; set; } + public double originy { get; set; } + public double destinationx { get; set; } + public double destinationy { get; set; } + } + + public class CircleAttributes : ProGraphicAttributes + { + public MapPoint mapPoint { get; set; } + public Double distance { get; set; } + public String distanceunit { get; set; } + public CircleFromTypes circleFromTypes { get; set; } + public String circletype { get; set; } + public Double centerx { get; set; } + public Double centery { get; set; } + } + + public class EllipseAttributes : ProGraphicAttributes + { + public MapPoint mapPoint { get; set; } + public double majorAxis{ get; set; } + public double minorAxis { get; set; } + public String distanceunit { get; set; } + public double angle { get; set; } + public string angleunit { get; set; } + public Double centerx { get; set; } + public Double centery { get; set; } + } + + public class RangeAttributes : ProGraphicAttributes + { + public MapPoint mapPoint { get; set; } + public int numRings { get; set; } + public double distance { get; set; } + public String distanceunit { get; set; } + public int numRadials { get; set; } + public Double centerx { get; set; } + public Double centery { get; set; } + } + +} diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProLinesViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProLinesViewModel.cs index f4e03349..f59f4eb5 100644 --- a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProLinesViewModel.cs +++ b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProLinesViewModel.cs @@ -189,10 +189,19 @@ internal override async void UpdateFeedback() var segment = QueuedTask.Run(() => { - return LineBuilder.CreateLineSegment(Point1, Point2); + try + { + return LineBuilder.CreateLineSegment(Point1, Point2); + } + catch (Exception ex) + { + return null; + } }).Result; - - + + if (segment == null) + return; + UpdateAzimuth(segment.Angle); await UpdateFeedbackWithGeoLine(segment, curveType, lu); @@ -209,15 +218,35 @@ public double? Azimuth get { return azimuth; } set { - if (value < 0.0) - throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); + if ((value != null) && (value >= 0.0)) + azimuth = value; + else + azimuth = null; - azimuth = value; RaisePropertyChanged(() => Azimuth); - if (!azimuth.HasValue) - throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + if (LineFromType == LineFromTypes.BearingAndDistance) + { + UpdateFeedback(); + } + + if ((value == null) || (value < 0.0)) + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEMustBePositive); + if (LineAzimuthType == AzimuthTypes.Degrees) + { + if (value > 360) + { + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + } + else + { + if (value > 6400) + { + throw new ArgumentException(DistanceAndDirectionLibrary.Properties.Resources.AEInvalidInput); + } + } AzimuthString = azimuth.Value.ToString("G"); RaisePropertyChanged(() => AzimuthString); } @@ -281,6 +310,10 @@ private async void UpdateManualFeedback() if (segment != null) await UpdateFeedbackWithGeoLine(segment, curveType, lu); } + else + { + ClearTempGraphics(); // if not, or no longer, valid clear + } } /// @@ -342,7 +375,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; } @@ -369,9 +402,19 @@ internal override async void OnMouseMoveEvent(object obj) // update azimuth from segment var segment = QueuedTask.Run(() => { - return LineBuilder.CreateLineSegment(Point1, point); + try + { + return LineBuilder.CreateLineSegment(Point1, point); + } + catch (Exception ex) + { + return null; + } }).Result; + if (segment == null) + return; + UpdateAzimuth(segment.Angle); await UpdateFeedbackWithGeoLine(segment, curveType, lu); } @@ -394,7 +437,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(){mapPoint1 = Point1, mapPoint2 = Point2, _distance = distance, angle = (double)azimuth, angleunit = LineAzimuthType.ToString(), distanceunit = LineDistanceType.ToString(), originx=Point1.X, originy = Point1.Y, destinationx=Point2.X, destinationy=Point2.Y}; + + 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..5328f68e 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() { mapPoint = Point1, numRings = NumberOfRings, distance = Distance, numRadials = NumberOfRadials, centerx=Point1.X, centery=Point1.Y, distanceunit=LineDistanceType.ToString() }; + AddGraphicToMap(newline, rangeAttributes); + } azimuth += interval; } @@ -244,7 +246,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() { mapPoint = Point1, numRings = numberOfRings, distance = radius, numRadials = numberOfRadials, centerx=Point1.X, centery=Point1.Y, distanceunit=LineDistanceType.ToString() }; + + AddGraphicToMap(geom, rangeAttributes); } return geom; @@ -277,7 +282,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 +296,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; @@ -354,6 +359,7 @@ internal override void Reset(bool toolReset) base.Reset(toolReset); NumberOfRadials = 0; + NumberOfRings = 10; } private void ConstructGeoCircle() @@ -375,7 +381,10 @@ 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() { mapPoint = Point1, numRings = NumberOfRings, distance = Distance, numRadials = NumberOfRadials, centerx=Point1.X, centery=Point1.Y, distanceunit=LineDistanceType.ToString() }; + + AddGraphicToMap(geom, rangeAttributes); } private void UpdateFeedbackWithGeoCircle() @@ -395,8 +404,12 @@ 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); + + // Hold onto the attributes in case user saves graphics to file later + RangeAttributes rangeAttributes = new RangeAttributes() { mapPoint = Point1, numRings = NumberOfRings, distance = Distance, numRadials = NumberOfRadials, centerx=Point1.X, centery=Point1.Y, distanceunit=LineDistanceType.ToString()}; + + AddGraphicToMap(Point1, ColorFactory.GreenRGB, null, true, 5.0); + AddGraphicToMap(geom, ColorFactory.GreyRGB, rangeAttributes, true); } } } diff --git a/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs b/source/DistanceAndDirection/ProAppDistanceAndDirectionModule/ProAppDistanceAndDirectionModule/ViewModels/ProTabBaseViewModel.cs index 352f32a4..5681e81a 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 { @@ -54,6 +55,8 @@ 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); + Mediator.Register(DistanceAndDirectionLibrary.Constants.POINT_TEXT_KEYDOWN, OnPointTextBoxKeyDown); // Get Current tool CurrentTool = FrameworkApplication.CurrentTool; @@ -155,6 +158,7 @@ public virtual bool IsToolActive internal bool HasPoint1 = false; internal bool HasPoint2 = false; + internal bool HasPoint3 = false; public bool HasMapGraphics { @@ -248,6 +252,9 @@ public string Point1Formatted { if (string.IsNullOrWhiteSpace(value)) { + if (!IsToolActive) + point1 = null; // reset the point if the user erased (TRICKY: tool sets to "" on click) + point1Formatted = string.Empty; RaisePropertyChanged(() => Point1Formatted); return; @@ -262,7 +269,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) { @@ -309,10 +316,14 @@ public string Point2Formatted { if (string.IsNullOrWhiteSpace(value)) { + if (!IsToolActive) + point2 = null; // reset the point if the user erased (TRICKY: tool sets to "" on click) + point2Formatted = string.Empty; RaisePropertyChanged(() => Point2Formatted); return; } + // try to convert string to a MapPoint var point = GetMapPointFromString(value); if (point != null) @@ -429,12 +440,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 +485,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 +622,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); @@ -789,6 +800,53 @@ 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 (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 && HasPoint3)) + { + 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) + { + Reset(false); + return; + } + } + } + } + + /// + /// Handler for when key is manually pressed in a Point Text Box + /// + /// always null + private void OnPointTextBoxKeyDown(object obj) + { + if (isActiveTab) + { + // deactivate the map point tool when a point is manually entered + if (IsToolActive) + IsToolActive = false; + } + } + internal double ConvertFromTo(DistanceTypes fromType, DistanceTypes toType, double input) { double result = 0.0; @@ -840,6 +898,9 @@ internal virtual void OnMouseMoveEvent(object obj) internal double GetGeodesicDistance(MapPoint p1, MapPoint p2) { + if ((p1 == null) || (p2 == null)) + return 0.0; + var meters = GeometryEngine.GeodesicDistance(p1, p2); // convert to current linear unit return ConvertFromTo(DistanceTypes.Meters, LineDistanceType, meters); @@ -864,11 +925,10 @@ 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); } - internal LinearUnit GetLinearUnit(DistanceTypes dtype) { LinearUnit result = LinearUnit.Meters; @@ -919,6 +979,9 @@ internal MapPoint GetMapPointFromString(string coordinate) { MapPoint point = null; + if (string.IsNullOrWhiteSpace(coordinate) || coordinate.Length < 3) // basic check + return null; + // future use if order of GetValues is not acceptable //var listOfTypes = new List(new GeoCoordinateType[] { // GeoCoordinateType.DD, 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