在Winforms中进行线程化,在完成任务时生成HTML报告

时间:2012-03-23 19:38:02

标签: winforms multithreading service

我有一个Winforms应用程序,它使用服务来安排一些工作。该服务有一个回调函数,可以通过工作程序更新数据库。

现在让我说我安排x个工作项目。 x工作项全部完成后,我想生成一份关于工作统计信息的HTML报告。我认为检查所有项目工作完成的唯一方法是在数据库中查看其完成状态。

有人可以告诉我如何以及何时生成HTML报告?我想我可以使用一个线程来轮询数据库以查看是否所有工作都已完成并通知UI生成报告,但不知道如何实现它。

2 个答案:

答案 0 :(得分:1)

您可以使用BackgroundWorker组件等待异步任务完成。这很简单。 首先 - 将BackgroundWorker从Toolbox拖到表单中。

第二 - 当您开始处理时(例如,在按钮点击事件上),添加以下代码:

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
}

多数民众赞成。 Btw BackgroundWorker可以在轮询数据库期间报告进度。很少的搜索将帮助您如何做到这一点:)

答案 1 :(得分:0)

您可以使用Task.ContinueWithTask.Wait

Example: Using Task

<强> Task.ContinueWith:    这扩展了初始任务。完成后立即运行

<强> Task.Wait    如果您正在运行多个可在不同时间提供相同结果的任务,即从不同的Web服务获取相同的数据,则可以使用此方法。(仅举例)。 一旦适当的任务成功完成,这将立即执行。