ArcGIS Pro的进度条
protected override async void OnClick()
{
using (var progress = new ProgressDialog("Showing Progress", "Canceled", 100, false))
{
var status = new CancelableProgressorSource(progress);
status.Max = 100;
progress.Show();
await QueuedTask.Run(async () =>
{
uint step = 0;
for (var idx = 0; idx < 10; idx++)
{
await Task.Delay(1000);
status.Progressor.Value += 10;
status.Progressor.Status = (status.Progressor.Value * 100 / status.Progressor.Max) + @" % Completed";
status.Progressor.Message = "Message " + status.Progressor.Value;
}
}, status.Progressor);
progress.Hide();
}
}
==================================
public async Task Progressor_Cancelable() { ArcGIS.Desktop.Framework.Threading.Tasks.CancelableProgressorSource cps = new ArcGIS.Desktop.Framework.Threading.Tasks.CancelableProgressorSource("Doing my thing - cancelable", "Canceled"); int numSecondsDelay = 5; //If you run this in the DEBUGGER you will NOT see the dialog //simulate doing some work which can be canceled await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() => { cps.Progressor.Max = (uint)numSecondsDelay; //check every second while (!cps.Progressor.CancellationToken.IsCancellationRequested) { cps.Progressor.Value += 1; cps.Progressor.Status = "Status " + cps.Progressor.Value; cps.Progressor.Message = "Message " + cps.Progressor.Value; if (System.Diagnostics.Debugger.IsAttached) { System.Diagnostics.Debug.WriteLine(string.Format("RunCancelableProgress Loop{0}", cps.Progressor.Value)); } //are we done? if (cps.Progressor.Value == cps.Progressor.Max) break; //block the CIM for a second Task.Delay(1000).Wait(); } System.Diagnostics.Debug.WriteLine(string.Format("RunCancelableProgress: Canceled {0}", cps.Progressor.CancellationToken.IsCancellationRequested)); }, cps.Progressor); }