2009-11-05 75 views
1

我想使用BackgroundWorker或線程從位於我的業務層的類上的Windows窗體調用方法。如果有人在傾聽,我希望這個業務層的方法能夠報告其進度,因爲它可能需要一段時間才能完成。 因爲我可能從BackgroundWorker開始,然後決定使用普通線程,所以我不想綁定到任何一個。通知後臺進度更改從另一個類

如果一個方法不知道它是否被背景調用者調用,那麼報告其進度的最佳方式是什麼? 我正在考慮在我的業務層類中提供一個事件,可以發佈任何人都應該聽的進度。

在框架中是否有一個代表已經爲此?更好的是我可以實現的接口 - 類似INotifyProgressChanged?

回答

0

我相信你與射擊的事件處理程序去正確的方向,你可以在類中聲明的事件(使用VB,C#是類似的課程)這樣:

Public Event foo(ByVal progressVar1 As Double, ByVal progressVar2 As String) 

再加入一些處理程序到你的winforms上。這裏出現的問題是觸發的事件將在背景工作者或線程的同一線程上執行,因此您仍然必須使用Invoke()方法來實際混淆UI。

0

你可以使用BackgroundWorker的,這裏有一些事件,你可以訂閱,

bgObj.DoWork += (sender, e)=>{ // do something in your business layer} 
    bgObj.RunWorkerCompleted += (sender, e)=>{ // do something} 
    bgObj.ProgressChanged += (sender, e)=>{ // do something}  

或者,你可以宣佈你的業務層內的公共事件(執行實際工作),並提高在適當的地方,事件以便訂戶(例如表單)可以獲得通知。 (注意除了UI線程,您可能無法更新UI控件,請檢查control1.BeginInvoke方法)