我有一個創建BackgroundWorker的表單。然後,工作人員會做一些工作,並在ReportProgress忙時將消息發送回UI。然後我將這些消息記錄到用戶界面。 ReportProgress由線程中的單個方法完成,我稱之爲「通知」。調用常用方法的類 - 委託?
但是,在線程內,我調用靜態類來做文件訪問類型的工作。這個靜態類也需要報告進度......所以我需要調用線程類的Notify方法來調用靜態類 - 但是,我無法訪問調用類中的方法。
所以,UI創建線程...並且線程使用一個類,但是我需要從靜態類調用類中的Notify方法。我怎樣才能做到這一點?
這是我的嘗試。這個想法是嘗試使用委託...但是,我堅持實際使用委託。 :)
在我的線程類,我有一個方法:
public void Notify(string message, Constants.ErrorLevel errorLevel)
{
var su = new StatusUpdate {StatusMessage = message, ErrorLevel = 0};
_bw.ReportProgress(0, su);
}
這是工作。它可以很好地向調用用戶界面報告。
我現在在這個類中創建一個委託:
public delegate bool NotificationsDelegate(object MessageHolder);
我已經改變了我的移交檔案管理靜態類,非靜態的,而且我想,當我到該委託傳遞給文件管理器類創建:
public class FileManager
{
private readonly NotificationsDelegate _notifications;
public FileManager(NotificationsDelegate notifications)
{
_notifications = notifications;
}
private void SendMessageBack(string p, ConsoleColor consoleColor)
{
var su = new StatusUpdate {ErrorLevel = 0, StatusMessage = p};
_notifications(su);
}
所以,我創建它,並通過通知委託...然後在我的「SendMessageBack」的方法,希望能夠調用該委託(被稱爲_notifications)。
但這就是我卡住的地方。委託尚未分配給通知方法。我對事件很陌生,所以猜測我的方式。但是,有人可以幫我解決這個問題嗎?
將BackgroundWorker傳遞給靜態類中的方法,以便它可以調用ReportProgress? – dtb 2013-04-18 04:12:20
我在想這個,但是每次使用靜態方法時,我都必須將bw對象添加到每個調用中? – Craig 2013-04-18 04:17:57