我有一个创建 BackgroundWorker 的表单。然后,worker 做一些工作,并在忙碌时执行 ReportProgress 将消息发送回 UI。然后我将这些消息记录到 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);
}
这是有效的。它很好地向调用 UI 报告。
我现在在这个类中创建了一个委托:
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)。
但这就是我卡住的地方。委托尚未分配给通知方法。我是新来的事件,所以猜测我的方式。但是,有人可以帮我解决这个问题吗?