2015-04-16 46 views
0

我找不到一個簡單的例子,但我認爲這是可能的。我正在調用一種方法。在該方法內部,它會循環多次,每個人都會循環遍歷循環。我想通知調用方法並在那裏附加一個事件,這樣我就可以有一個狀態欄來顯示進度。如何創建一個可以從我調用的方法內部報告進度的事件處理程序?

換句話說,我有一個狀態欄的Winform,並且在這個WinForm應用程序中調用了一個方法。在該方法內循環迭代,我想以某種方式將該信息返回到WinForm應用程序,所以我可以更改狀態欄。

if (fDialog.ShowDialog() == DialogResult.OK) 
    { 
     Session s = EncompassSession.Instance2(url, name, password); 
     DataTable dt = ExcelHelper.ReadAsDataTable(fDialog.FileName.ToString()); 
     EncompassBoxHelper.UpdateBoxes(s, dt); //This is the main function that does the long process 
     s.End(); 
    } 
+0

所以你有這樣做有什麼問題?將委託傳遞給方法,讓類型定義一個事件等等。有很多方法可以做到這一點。你有什麼問題? – Servy

回答

2

有多種選擇,但一個簡單的辦法是有你的方法採取了特殊的回調方法作爲參數,然後調用該方法在某些點,提供上下文信息。

public void UpdateBoxes(Session s, DataTable dt, Action<ProgressInfo> updateProgress) 
{ 
    for (...) 
    { 
     ... 
     updateProgress(new ProgressInfo(...)); 
    } 
} 

方法,然後可以稱爲是這樣的:

EncompassBoxHelper.UpdateBoxes(s, dt, 
     progress => UpdateProgressBar(progress)); 
+0

謝謝..現在這個..它對我的全新思考水平 – punkouter

+1

似乎工作。哇。那很簡單。 – punkouter

相關問題