SearchAndSubscribe Method (RealtimeFeatureClass)
Searches the feature class for existing rows using the query criteria and then subscribes to receive row events.
This method must be called on the MCT. Use QueuedTask.Run.
Parameters
- queryFilter
-
A null query filter will search all rows and all rows that become
available will be retrieved.
- useRecyclingCursor
- If set to true, all the entries in RealtimeCursor will reference the most current row returned by RealtimeCursor.Current. To ensure all the entries in RealtimeCursor remain unique, set to false. The default is true.
Return Value
A
RealtimeCursor that encapsulates the retrieved rows, as well as provides facilities to wait for new row events.
Search And Subscribe for Streaming Data
await QueuedTask.Run(async () =>
{
//query filter can be null to search and retrieve all rows
//true means recycling cursor
using (var rc = streamLayer.SearchAndSubscribe(qfilter, true))
{
//waiting for new features to be streamed
//default is no cancellation
while (await rc.WaitForRowsAsync())
{
while (rc.MoveNext())
{
using (var row = rc.Current)
{
//determine the origin of the row event
switch (row.GetRowSource())
{
case RealtimeRowSource.PreExisting:
//pre-existing row at the time of subscribe
continue;
case RealtimeRowSource.EventInsert:
//row was inserted after subscribe
continue;
case RealtimeRowSource.EventDelete:
//row was deleted after subscribe
continue;
}
}
}
}
}//row cursor is disposed. row cursor is unsubscribed
//....or....
//Use the feature class instead of the layer
using (var rfc = streamLayer.GetFeatureClass())
{
//non-recycling cursor - 2nd param "false"
using (var rc = rfc.SearchAndSubscribe(qfilter, false))
{
//waiting for new features to be streamed
//default is no cancellation
while (await rc.WaitForRowsAsync())
{
//etc
}
}
}
});
Search And Subscribe With Cancellation
await QueuedTask.Run(async () =>
{
//Recycling cursor - 2nd param "true"
//or streamLayer.Subscribe(qfilter, true) to just subscribe
using (var rc = streamLayer.SearchAndSubscribe(qfilter, true))
{
//auto-cancel after 20 seconds
var cancel = new CancellationTokenSource(new TimeSpan(0, 0, 20));
//catch TaskCanceledException
try
{
while (await rc.WaitForRowsAsync(cancel.Token))
{
//check for row events
while (rc.MoveNext())
{
using (var row = rc.Current)
{
//etc
}
}
}
}
catch (TaskCanceledException )
{
//Handle cancellation as needed
}
cancel.Dispose();
}
});
Target Platforms: Windows 11, Windows 10
ArcGIS Pro version: 3 or higher.