2012-03-23 42 views
0

我有一个Winforms应用程序,它使用服务来安排一些工作。该服务具有回调功能,可以通过工作流程更新数据库。在Winforms中线程化,在任务完成时生成HTML报告

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

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

+0

你使用.NET或什么? – sll 2012-03-23 19:42:09

回答

1

您可以使用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 
} 

就是这样。 Btw BackgroundWorker可以在轮询数据库期间报告进度。一点搜索将帮助你如何做到这一点:)

0

您可以使用Task.ContinueWithTask.Wait

Example: Using Task

Task.ContinueWith: 这扩展了最初的任务。立刻运行它完成

后Task.Wait 如果你正在运行多个任务提供相同的结果你会使用这个是可以在不同的时间,即取出由不同的网络服务相同的数据这样做。(只是一个例)。 只要其中一项任务成功完成,就会执行此操作。

+1

你能否提供我一些更多的细节? – naspras 2012-03-23 19:44:50

+0

我发布了另一个更好地解释如何使用的链接。 – 2012-03-23 19:59:36