C#未触发静态事件
我正在做某种状态报告,以便将新状态更新到UI。例如,状态可以是“正在加载…”、“已加载…”等等。我的问题是StatusChanged事件始终为null,无法触发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
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:什么不是来自类?在事件订阅之前状态正在更改。噢。不管怎样,这是我的答案,我已经测试过了。希望它有帮助,而不是一定要接受它。