我有一个创建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