Потоки в Winforms, генерировать HTML-отчет о завершении задач - PullRequest
0 голосов
/ 23 марта 2012

У меня есть приложение Winforms, которое планирует некоторую работу с помощью службы. Служба имеет функцию обратного вызова, которая обновляет базу данных в соответствии с работой.

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

Может кто-нибудь сказать мне, как и когда я могу генерировать отчет в формате HTML? Я думаю, что могу использовать поток для опроса базы данных, чтобы увидеть, завершена ли вся работа, и сообщить UI для создания отчета, но не знаю, как это реализовать.

Ответы [ 2 ]

1 голос
/ 24 марта 2012

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

Второе - когда вы начинаете обработку (например, при нажатии кнопки), добавьте следующий код:

private void button_Click(object sender, EventArgs e)
{
    backgroundWorker1.DoWork += backgroundWorker1_DoWork;    
    backgroundWorker1.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted;
    backgroundWorker1.RunWorkerAsync();
}

Далее - добавить в обработчик событий DoWork код, который начинает обработку и опрос базы данных:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    // schedule some work
    // poll database
}

И последнее - добавить обработчик RunWorkerCompleted, который будет запускаться сразу после завершения DoWork (т.е. все задачи обновляли свое состояние в базе данных):

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    // generate report
}

Вот и все. Кстати, BackgroundWorker может сообщать о прогрессе во время опроса базы данных. Небольшой поиск поможет вам, как это сделать:)

0 голосов
/ 23 марта 2012

Вы можете использовать Task.ContinueWith и Task.Wait

Пример: использование задачи

Task.ContinueWith: Это расширяет начальную задачу.Запускать сразу же после его завершения

Task.Wait Вы можете использовать это, если вы запускаете несколько задач, которые дают одинаковый результат, могут делать это в разное время, то есть получать одни и те же данные из разных вебуслуги. (просто пример).Это будет выполнено, как только одна из соответствующих задач успешно завершится.

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