| ♥ 0 | Boas tardes. No seguimento deste post, pergunto como se pode Cancelar uma tarefa? Pseudo-código:
int intTotalItemsCount = 0;
DialogResult result = PSO.Dialogos.MostraDialogoEsperaAsync(this, "A Gravar Fornecedores", new Action<Progress<int>, CancellationToken>((progress, cancel) =>
{
int intCurrentSelectedRow = 0;
for (var row = 1; row <= priGrelhaFornecedores.Grelha.DataRowCnt; row++)
{
intCurrentSelectedRow++;
((IProgress<int>)progress).Report((int)(((decimal)intCurrentSelectedRow / intTotalItemsCount) * 100));
//code
}
cancel.ThrowIfCancellationRequested();
}));Simplesmente fazer cancel = false não funciona pois o cancel não é um bool. Pergunto também como posso ir mudando o titulo da janela ao longo do processo? Por exemplo, neste caso, imaginemos que queria que a mensagem em vez de dizer “A Gravar Fornecedor” queria que a janela fosse dizendo “A Gravar o Fornecedor XXX”… Marcado como spam |
Comentários Quase dois anos, e nada de resposta... |
1 respostas
| Resposta privada Abaixo código para cancelar uma tarefa através do MostraDialogoEsperaAsync. Basicamente o que estava em falta era o registo do método que trata o cancelamento da operação. private void simpleButton3_Click(object sender, EventArgs e)
{
try
{
int t = 0;
PriEngine.Platform.MensagensDialogos.MostraDialogoEsperaAsync(this, "Espera", new Action<Progress<int>, CancellationToken>((progress, cancel) =>
{
t = 1;
cancel.Register(CancelaTarefa);
TestaProgressBar((IProgress<int>)progress);
t = 2;
/*int intCurrentSelectedRow = 0;
int maxRows = 1000;
for (var row = 1; row <= maxRows; row++)
{
intCurrentSelectedRow++;
Thread.Sleep(10);
((IProgress<int>)progress).Report((int)(((decimal)intCurrentSelectedRow / maxRows) * 100));
//code
}*/
}));
if (t==1)
PriEngine.Platform.MensagensDialogos.MostraAviso($"A tarefa foi cancelada.");
else
PriEngine.Platform.MensagensDialogos.MostraAviso($"A tarefa foi concluida.");
}
catch (Exception)
{
throw;
}
}
private void CancelaTarefa()
{
try
{
//PriEngine.Platform.MensagensDialogos.MostraAviso("A tarefa foi cancelada.");
}
catch (Exception)
{
throw;
}
}
private void TestaProgressBar(IProgress<int> progress)
{
try
{
int intCurrentSelectedRow = 0;
int maxRows = 100;
for (var row = 1; row <= maxRows; row++)
{
intCurrentSelectedRow++;
Thread.Sleep(1);
progress.Report((int)(((decimal)intCurrentSelectedRow / maxRows) * 100));
//code
}
}
catch (Exception)
{
throw;
}
}
Marcado como spam |