Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Il existe plusieurs façons d’afficher la progression d’une tâche en arrière-plan en cours d’exécution dans Visual Studio. Voici comment utiliser des barres de progression à partir de vos propres extensions.
Barre d'état
La barre d’état a son propre indicateur de progression et il est l’endroit le plus simple pour afficher la progression à l’utilisateur. Il est visible, mais ne demande pas l’attention de l’utilisateur ou bloque sa tâche actuelle. La barre d’état est une bonne option pour la plupart des tâches en arrière-plan.
L’utilisation de l’API pour afficher la progression de la barre d’état est assez simple :
await Task.Delay(1000); // long running task
await VS.StatusBar.ShowProgressAsync("Step 1/3", 1, 3);
await Task.Delay(1000); // long running task
await VS.StatusBar.ShowProgressAsync("Step 2/3", 2, 3);
await Task.Delay(1000); // long running task
await VS.StatusBar.ShowProgressAsync("Step 3/3", 3, 3);
// Progress ends as current step (3) and total steps (3) are equal
Boîte de dialogue d’attente threaded
La boîte de dialogue d’attente threaded (TWD) est une boîte de dialogue d’indicateur de progression qui s’affiche uniquement si la tâche en arrière-plan prend plus de x secondes spécifiées par l’extendeur. Il écrit la progression dans la barre d’état tout le temps, mais affiche la boîte de dialogue après x nombre de secondes en cours d’exécution.
Le TWD ne peut pas être affiché chaque fois que vous le souhaitez. Il est géré par Visual Studio de sorte qu’il n’interfère pas trop souvent avec l’utilisateur final. L’utilisation nécessite plus de code que simplement l’utilisation de la barre d’état, mais il s’agit toujours d’une API relativement simple à utiliser :
var fac = await VS.Services.GetThreadedWaitDialogAsync() as IVsThreadedWaitDialogFactory;
IVsThreadedWaitDialog4 twd = fac.CreateInstance();
twd.StartWaitDialog("Demo", "Working on it...", "", null, "", 1, true, true);
var totalSteps = 3;
for (var currentStep = 1; currentStep <= totalSteps; currentStep++)
{
var text = $"Step {currentStep}/{totalSteps}";
twd.UpdateProgress("In progress", text, text, currentStep, totalSteps, true, out _);
await Task.Delay(1000); // long running task
if (currentStep == totalSteps)
{
// Dismisses the dialog
(twd as IDisposable).Dispose();
}
}
Centre d’état des tâches
En bas à gauche de la barre d’état est le Centre d’état des tâches (TSC). Il est utilisé pour signaler la progression des tâches en arrière-plan longues et est utilisé par de nombreux services dans Visual Studio.
L’API a plus de concepts que d’utiliser les autres méthodes d’affichage de la progression.
private async Task StartAsync()
{
IVsTaskStatusCenterService tsc = await VS.Services.GetTaskStatusCenterAsync();
var options = default(TaskHandlerOptions);
options.Title = "My long running task";
options.ActionsAfterCompletion = CompletionActions.None;
TaskProgressData data = default;
data.CanBeCanceled = true;
ITaskHandler handler = tsc.PreRegister(options, data);
Task task = LongRunningTaskAsync(data, handler);
handler.RegisterTask(task);
}
private async Task LongRunningTaskAsync(TaskProgressData data, ITaskHandler handler)
{
float totalSteps = 3;
for (float currentStep = 1; currentStep <= totalSteps; currentStep++)
{
await Task.Delay(1000);
data.PercentComplete = (int)(currentStep / totalSteps * 100);
data.ProgressText = $"Step {currentStep} of {totalSteps} completed";
handler.Progress.Report(data);
}
}