2012-03-23 32 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