Библиотека для выполнения длительных действий в .NET / Windows Forms? - PullRequest
1 голос
/ 07 октября 2011

Есть ли библиотека / фреймворк для выполнения длительных действий в .NET? Ищите что-то вроде этого:

private void button1_Click(...)
{
  LongActionRunner.Execute((ref int total, ref int done) => {
    // i know it's not thread-safe
    total = 100;
    for(var i = 0; i <= 100; ++i) {
      done = i;
      Thread.Sleep(100); // slow
    }
  });
}

Когда вызывается Execute(), мне нужно отобразить окно с индикатором выполнения. Если выбрасывается мое действие, должно отображаться сообщение об ошибке и т. Д.

Существуют ли какие-либо решения?

Ответы [ 2 ]

3 голосов
/ 07 октября 2011

Вы можете использовать BackgroundWorker . Это предназначено специально для сценария, который вы представили. См. здесь , чтобы узнать, как реализовать индикатор выполнения с помощью BackgroundWorker.

0 голосов
/ 07 октября 2011

BackroundWorker использует поток пула потоков, поэтому его следует использовать только для относительно (не более 1 секунды) единиц работы. Если ваша операция займет больше времени, вы должны создать поток.

Я, как и многие другие, я подозреваю, написал это для коммерческих проектов, но я не знаю ни одного решения с открытым исходным кодом. Я согласен, что вам нужно отобразить диалоговое окно с индикатором выполнения, хотя бы для того, чтобы пользователь дважды не нажал кнопку 1 и не вызвал повторный вход. Как вы говорите, вы также должны обрабатывать ошибки и отмены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...