Exibir barra de progresso ao fazer algum trabalho em c #?

Eu quero exibir uma barra de progresso ao fazer algum trabalho, mas que iria travar a interface do usuário e a barra de progresso não será atualizada.

Eu tenho um WinForm ProgressForm com umProgressBar que continuará indefinidamente em ummarquise moda.

using(ProgressForm p = new ProgressForm(this))
{
//Do Some Work
}

Agora há muitas maneiras de resolver o problema, como usarBeginInvoke, aguarde a conclusão da tarefa e chameEndInvoke. Ou usando oBackgroundWorker ouThreads.

Estou tendo alguns problemas com o EndInvoke, embora essa não seja a questão. A questão é qual é a melhor e mais simples maneira de lidar com tais situações, onde você tem que mostrar ao usuário que o programa está funcionando e não está respondendo, e como você lida com isso com o código mais simples possível, que é eficiente e venceu. t vazamento e pode atualizar a GUI.

GostarBackgroundWorker precisa ter múltiplas funções, declarar variáveis ​​de membro, etc. Além disso, você precisa manter uma referência ao Formulário ProgressBar e descartá-lo.

Editar: BackgroundWorker não é a resposta porque pode ser que eu não receba a notificação de progresso, o que significa que não haveriaProgressChanged Enquanto oDoWork é uma única chamada para uma função externa, mas eu preciso continuar a ligar para oApplication.DoEvents(); para a barra de progresso continuar girando.

A recompensa é a melhor solução de código para este problema. Eu só preciso ligarApplication.DoEvents() para que a barra de progresso Marque funcione, enquanto a função worker funciona no thread Principal e não retorna nenhuma notificação de progresso. Eu nunca precisei de código mágico .NET para reportar o progresso automaticamente, eu só precisava de uma solução melhor que:

Action<String, String> exec = DoSomethingLongAndNotReturnAnyNotification;
IAsyncResult result = exec.BeginInvoke(path, parameters, null, null);
while (!result.IsCompleted)
{
  Application.DoEvents();
}
exec.EndInvoke(result);

que mantém a barra de progresso viva (significa não congelar, mas refresca a marca)

questionAnswers(13)

yourAnswerToTheQuestion