C#未触发静态事件

C#未触发静态事件,c#,events,static,null,C#,Events,Static,Null,我正在做某种状态报告,以便将新状态更新到UI。例如,状态可以是“正在加载…”、“已加载…”等等。我的问题是StatusChanged事件始终为null,无法触发 public class StatusReporter { public delegate void StatusChangedEventHandler(Status status); public static event StatusChangedEventHandler StatusChanged; p

我正在做某种状态报告,以便将新状态更新到UI。例如,状态可以是“正在加载…”、“已加载…”等等。我的问题是StatusChanged事件始终为null,无法触发

public class StatusReporter
{
    public delegate void StatusChangedEventHandler(Status status);

    public static event StatusChangedEventHandler StatusChanged;

    private static Status status;

    public static Status CurrentStatus
    {
        get
        {
            return status;
        }
        set
        {
            status = value;
            OnStatusChange();
        }
    }

    private static void OnStatusChange()
    {
        if (StatusChanged != null)
        {
            StatusChanged(status);
        }
    }
}
守则:

public class StatusReporter {
    public delegate void StatusChangedEventHandler(Status status);
    public static event StatusChangedEventHandler StatusChanged;

    public static Status CurrentStatus {
        set {
            StatusReporter.OnStatusChange(status=value);
        }

        get {
            return StatusReporter.status;
        }
    }

    static void OnStatusChange(Status status) {
        if(null!=StatusChanged)
            StatusReporter.StatusChanged(status);
    }

    static Status status;
}
测试:

partial class Form1 {
    static void Form1_StatusChange(Status status) {
        Debug.Print("status changed");
    }

    private void button2_Click(object sender, EventArgs e) {
        StatusReporter.StatusChanged+=Form1_StatusChange;
        StatusReporter.CurrentStatus=new Status(); // assumed, you don't show the Status class
    }
}

虽然我不明白为什么都是静态的

这意味着没有人订阅您的事件。您如何向事件添加处理程序…?我已经从MainWindow类订阅了事件,这就是为什么我不知道发生了什么。StatusReporter.StatusChanged+=新的StatusReporter.StatusChangedEventHandler(StatusReporter\u StatusChanged);静态事件适用的情况很少。我怀疑这不是他们自己的。你发布的看起来还可以。在尝试引发事件之前,请使用调试器确认正在调用订阅事件的代码。检查你没有在任何地方取消订阅。(旁白:考虑让这个班级静态化)我发现问题是什么。它不是来自类。@NikolayDakov:什么不是来自类?在事件订阅之前状态正在更改。噢。不管怎样,这是我的答案,我已经测试过了。希望它有帮助,而不是一定要接受它。